最后效果是这样的:
收款日期 上期累计应收款 期间新增应收款 本次收款 剩余应收款
……
2013-05-10 800 500 200 1100
2013-04-20 1000 200 800列表中 期间新增应收款 的值是根据 收款日期(2013-04-20~2013-05-10) 到另外的表A中获取的,
如果是最下面一条记录,那么 期间新增应收款 为空或零,倒数第二条记录的 期间新增应收款 去他们收款日期间的和,思路类似:
select b.收款日期,b.上期累计应收款,(select xx from a where a.日期 between b.收款日期1 and b.收款日期2 ) as 期间新增应收款,b.本次收款,b.剩余应收款 from b,关键怎么样才能获取到对应的 收款日期呢
收款日期 上期累计应收款 期间新增应收款 本次收款 剩余应收款
……
2013-05-10 800 500 200 1100
2013-04-20 1000 200 800列表中 期间新增应收款 的值是根据 收款日期(2013-04-20~2013-05-10) 到另外的表A中获取的,
如果是最下面一条记录,那么 期间新增应收款 为空或零,倒数第二条记录的 期间新增应收款 去他们收款日期间的和,思路类似:
select b.收款日期,b.上期累计应收款,(select xx from a where a.日期 between b.收款日期1 and b.收款日期2 ) as 期间新增应收款,b.本次收款,b.剩余应收款 from b,关键怎么样才能获取到对应的 收款日期呢
A B C
7 5 7
5 3 5
3 2 3
2 2 2
2 1 2
1 0 0
这个该怎么实现
-- Author :TravyLee(物是人非事事休,欲语泪先流!)
-- Date :2013-06-20 15:18:26
-- Version:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 6.1 <X86> (Build 7600: )
--
----------------------------------------------------------------
--> 测试数据:#tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([A] int,[B] int,[C] int)
insert #tb
select 7,5,7 union all
select 5,3,5 union all
select 3,2,3 union all
select 2,2,2 union all
select 2,1,2 union all
select 1,0,0
go
;with t
as(
select px=ROW_NUMBER()over(Order by getdate()),* from #tb
)
select
A,
isnull((select A from t b where b.px=a.px-1),B) as B,
A as C
from t a/*
A B C
-----------------------------
7 5 7
5 7 5
3 5 3
2 3 2
2 2 2
1 2 1
*/
从你的字面意思理解
as(
select px=ROW_NUMBER()over(Order by getdate()),* from #tb
)
select
A,
isnull((select A from t b where b.px=a.px+1),B) as B,
A as C
from t a