A表为:领奖士兵表,数据如下:
(士兵标识 应该领奖金 实际得到奖金)
id  fee  gfee
1   10 
2   20
3   30
4   40
其中所有gfee都是空值;
B表为:全部钱库表
(钱库标识  钱库金额)
qid qmoney
1   15
2   5
3   30要达成的目标是:将全部的钱按照士兵标识顺序分配。有多少钱就分多少钱,钱不够的话,就不分了。
对于上面这种情况,分配的最终结果就是:
id  fee  gfee
1   10    10
2   20    20
3   30    20
4   40    0请问这样的sql怎么写?要求是批量操作的,不要用游标和循环处理。

解决方案 »

  1.   

    select case when xfee <= totalfee then fee else 
    (case when totalfee-tfee <= 0 then 0 else totalfee-tfee end ) end case from(
    select  fee,gfee,xfee,lag(xfee) over(order by i) tfee,totalfee from(
    select i,fee,gfee,sum(fee) over(order by i) xfee,
    totalfee from(
    select i,fee,gfee,totalfee from a,(select sum(qmoney) totalfee from b)
    )))i就是id
      

  2.   

    楼上的快哦SQL> with  a as(
      2  select 1 id ,10 fee , null gfee from dual
      3  union all
      4  select 2 ,20 , null  from dual
      5  union all
      6  select 3 ,30 , null  from dual
      7  union all
      8  select 4 ,40 , null  from dual
      9  ),
     10  b as(
     11  select 1 qid,15 qmoney from dual
     12  union all
     13  select 2,5 from dual
     14  union all
     15  select 3,30 from dual
     16  )
     17  select id, case when xfee <= totalfee then fee else
     18  (case when totalfee-tfee <= 0 then 0 else totalfee-tfee end ) end case from(
     19  select  id,fee,gfee,xfee,lag(xfee) over(order by id) tfee,totalfee from(
     20  select id,fee,gfee,sum(fee) over(order by id) xfee,
     21  totalfee from(
     22  select id,fee,gfee,totalfee from a,(select sum(qmoney) totalfee from b)
     23  )))
     24  ;        ID       CASE
    ---------- ----------
             1         10
             2         20
             3         20
             4          0SQL>
      

  3.   

    CSDN上的高手就是多啊
    接分!