现在的位置: 首页 > 综合 > 正文

求一功能实现的SQL.数据分摊的问题。

2013年07月15日 ⁄ 综合 ⁄ 共 913字 ⁄ 字号 评论关闭
 
 
例如:
新增赠款表A  
A1 A2 A3 A4
账本:1004 赠款:10元 赠款时间: 7月10日1点, 无值
账本:1008 赠款: 5元 赠款时间: 7月10日2点; 无值
账本:1008 赠款: 10元 赠款时间: 7月10日3点; 无值

销帐表B 只有15元的销帐记录
B1
15

现在要在新增赠款表A中后面某字段A4增加销帐金额,这个值的SQL该如何取数?? 
规则如下:按照时间先到先销
(例如赠款时间: 7月10日1点 销帐金额此处因该为:10元,赠款时间: 7月10日2点 销帐金额为5元 ,赠款时间: 7月10日3点 销帐金额为 0元)

 
结果数据为:
新增赠款表A  
A1 A2 A3 A4
1004 10 201207100100 10
1008 5 201207100200 5
1008 10 201207100300 0
 
 
我写的SQL:
 

with a as
(select 10 aa,1 bb from dual
union all
select 8,2 from dual
union all
select 10,3 from dual
union all
select 10,4 from dual
),
b as
(
  select 5 cc,1 dd from dual
)

select aa,bb,case when (dd<0 and ee is null) then cc  when dd>=0 then aa  when ee>=0 then ee else 0  end cc  from

(
    select aa,bb,cc,cc-ee dd,lag(cc-ee)over(partition by dd order by bb) ee
    from
        (
               select aa,bb,cc,dd,sum(aa)over(partition by dd order by bb) ee from a,b
        )
)

 

 

 

----分别测试: 9,17,18,25,28,29

 --都OK。

--最后一行就是你要的数据

 

--增加第四行测试也OK。

 
 
 
 
 
 
 
 
 
 
 
【上篇】
【下篇】

抱歉!评论已关闭.