[SQL SERVER][TSQL]如何計算群組中累減值

[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 

 

image

 

 

參考

[SQL SERVER][TSQL]如何計算累加值