读书人

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

发布时间: 2012-08-14 10:39:58 作者: rapoo

求一功能实现的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。

读书人网 >SQL Server

热点推荐