首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-08-14 
求一功能实现的SQL.数据分摊的问题。http://topic.csdn.net/u/20120720/15/b9bc787d-ca72-40b2-bd34-42f175

求一功能实现的SQL.数据分摊的问题。
http://topic.csdn.net/u/20120720/15/b9bc787d-ca72-40b2-bd34-42f175844eb6.html?seed=703764514&r=79185022#r_79185022  例如:
新增赠款表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。

           

热点排行