Sql Yürüyen Bakiye (Önceki Bakiye ve Güncel Bakiye)

SET NOCOUNT ON

If(OBJECT_ID('tempdb..#TABLOM') Is Not Null)
Begin
Drop Table #TABLOM
End

CREATE TABLE #TABLOM
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
SELECT '2019-12-10','A001',10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',-10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',10,'102',0,0 UNION ALL
SELECT '2019-12-10','B001',10,'100',0,0 UNION ALL
SELECT '2019-12-20','B001',-20,'100' ,0,0

DECLARE @KOD VARCHAR(15)=''
DECLARE @DEPO VARCHAR(15)='',@GUNCELBAKIYE DECIMAL(38,2)=0,@ONCEKIBAKIYE DECIMAL(38,2)=0

UPDATE T
SET @GUNCELBAKIYE = GUNCELBAKIYE = MIKTAR + CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE ELSE 0 END,
@ONCEKIBAKIYE = ONCEKIBAKIYE = CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE-MIKTAR ELSE 0 END,

@KOD=KOD,
@DEPO=DEPOKODU
FROM #TABLOM AS T WITH(TABLOCK)
OPTION (MAXDOP 1);

SELECT * FROM #TABLOM

Yorumlar