我有一个药品信息表,里面有一条药品,该药品有中心限价为5000,医院可以有自己的价格,如果一人在一次住院中:
用第一个该药品,医院价格为a,中心限价为b,报销比例为0.8,如果a>=b,则可以报销金额c为b,否则为a*0.8;
用第二个该药品,医院价格为a,中心限价为b,报销比例为0.8,如果医院价格大于b并且第一次的报销金额超过b,则第二次报销金额为b*(1-20%),
                                                 如果医院价格大于b,第一此报销金额小于b,则第二次报销金额为b,
                                                 如果医院价格小于b,则第二此报销金额为:a*0.8
用第三个该药品,医院价格为a,中心限价为b,报销比例为0.8,如果医院价格大于b并且前2次的报销金额都大于b,则第三次报销金额为b*(1-20%)(1-20%),
                                                 如果医院价格大于b并且前2次的报销金额中只有一次大于b,则,第三次报销金额为b*(1-20%)
                                                 如果医院价格大于b并且前2次的报销金额都小于b,则第三次报销金额为b,
                                                 如果医院价格小于b,则第三次报销金额为a*0.8
第四个.......以此类推,该怎么处理逻辑啊,有点混乱,请大家指导,用PL/SQL怎么写出来啊

解决方案 »

  1.   

    药品信息表中用到的就是药品价格、中心限价
    报销比例为一个参数控制
    用几个该药品是存在另一个处方信息表中的第1次报销金额,第二次报销金额都是在变量里存,系统不存,要根据使用药品数量循环:
    我想用记录表的形式的变量储存报销金额,但不知道怎么设计,如rec_bxje[n].bxje  n为第一次,第二次...
      

  2.   

    因为不太明白你的报销金额是怎么弄出来的,所以个人觉得是否可以找到一个像“数学归纳法”一样的公式,这样问题就只要用ORACLE套用公式就可以了。呵呵,可能只是一个想法,不知是否对你有帮助。
      

  3.   

    业务逻辑设计别人很难帮上你的,只有你最熟悉业务.建议你先设计好算法,然后遇到实现问题的时候再问SQL写法..
      

  4.   

    是报销金额与医院价格的关系,医院价格是基础;
    报销金额应该是多少?与第几次报销的计算有关;所以应该还要有另一个表,这个表存储计算倍率;我认为新加的表结构应该为:
    tb(id int,less number(8,2),more number(8,2))
    id为第几次计算
    less为医院价格小于报销金额,用less值计算出应该报销金额
    more为医院价格大于报销金额,用more值计算出应该报销金额
      

  5.   

             TYPE rec_tszl IS RECORD (bxje NUMBER(12,2),  --特殊诊疗报销金额
                                      jrtc NUMBER(12,2),  --特殊诊疗进入统筹金额
                                      zfje NUMBER(12,2)); --特殊诊疗自付金额
             TYPE type_tszl IS TABLE OF rec_tszl index by binary_integer;
             type_tscl type_tszl;
    AKC225 为医院价额,AKA068 为中心限价
    FOR i IN 1..N_AKC226     --数量
                          LOOP
                            IF i = 1 THEN
                                 IF N_AKC225 > N_AKA068 THEN
                                    type_tscl(i).bxje := N_AKA068;           --报销金额
                                    type_tscl(i).zfje := N_AKC225 - N_AKA068;--自付金额
                                 ELSE
                                    type_tscl(i).jrtc := N_AKC225 * (1 - N_YLZYZFBL);
                                    type_tscl(i).zfje := N_AKC228 * N_YLZYZFBL;
                                 END IF;
                            END IF; 
                            IF i = 2 THEN
                                 IF N_AKC225 > N_AKA068 AND type_tscl(i-1) > N_AKA068 THEN
                                    type_tscl(i).bxje := N_AKA068 * (1 - 20%);           --报销金额
                                    type_tscl(i).zfje := N_AKC225 - N_AKA068 * (1 - 20%);--自付金额
                                 ELSIF N_AKC225 > N_AKA068 AND type_tscl(i-1) < N_AKA068 THEN
                                    type_tscl(i).jrtc := N_AKA068;
                                    type_tscl(i).zfje := N_AKC225 - N_AKA068;
                                 ELSE
                                    type_tscl(i).jrtc := N_AKC225 * (1 - N_YLZYZFBL);
                                    type_tscl(i).zfje := N_AKC228 * N_YLZYZFBL;
                                 END IF;
                            END IF;   
                          END LOOP;
    写不下去了,如果用10个怎么处理啊,还要用阶乘,写不出来了