[SQL SERVER][TSQL]如何計算群組中累減值
網友問題,自己改寫以前使用的update方法。
--結果表
declare @result table(rownums int,TITLE_ID varchar(10),DATEX varchar(10),DC varchar(1),ST int,D_AMT int,C_AMT int, total int default(0))
;with mycte
as
(
select rownums=ROW_NUMBER() over (partition by a.TITLE_ID order by a.TITLE_ID),
a.TITLE_ID,b.DATEX,a.DC,a.ST,b.D_AMT,b.C_AMT,0 as total
from ta a join td b
on a.TITLE_ID=b.TITLE_ID
)
--將CTE結果塞入結果表
insert into @result
select * from mycte
--利用Update搭配變數
declare @total int,@pretotal int
--處理DC=D規則
set @total=0
set @pretotal=0
update @result
set @pretotal =
case
when rownums=1 then 0
else @pretotal
end
,@total = total = @pretotal+
case
when rownums=1 then st
when rownums>1 then @total
end + D_AMT-C_AMT
where DC='D'
--處理DC=C規則
set @total=0
set @pretotal=0
update @result
set @pretotal =
case
when rownums=1 then 0
else @pretotal
end
,@total = total = @pretotal +
case
when rownums=1 then st
when rownums>1 then @total
end - D_AMT+C_AMT
where DC='C'
--顯示最後結果
select * from @result
參考