22,209
社区成员
发帖
与我相关
我的任务
分享
SELECT a,ISNULL(B.SUBTOTAL,0) AS a1,a2,a3,ISNULL(B.SUBTOTAL,0)+a2-a3 AS a4
FROM #T A
OUTER APPLY (SELECT SUM(a1+a2-a3) AS SUBTOTAL FROM #T WHERE a<A.a) AS B
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([a] Date,[a1] int,[a2] int,[a3] int,[a4] int)
Insert #T
select '2018-04-01',0,100,200,0 union all
select '2018-04-02',0,50,150,0 union all
select '2018-04-03',0,300,100,0
Go
--测试数据结束
;WITH cte AS (
SELECT a,
a1,
a2,
a3,
a1 + a2 - a3 AS a4
FROM #T
WHERE a = '2018-04-01'
UNION ALL
SELECT #T.a,
cte.a4 AS a1,
#T.a2,
#T.a3,
cte.a4 + #T.a2 - #T.a3
FROM #T
JOIN cte
ON DATEDIFF(DAY, cte.a, #T.a) = 1
)
SELECT * FROM cte