Bryian Tan
Вы можете использовать ту же концепцию отсюда: Как я могу учитывать нулевые значения в текущей сумме?[^]
Единственное отличие заключается в том, что сначала запрос должен найти разницу между дебетом и кредитом, а затем запустить расчет текущей суммы. Ниже в качестве примера.
DECLARE @RunTotalTestData TABLE (
Id int not null identity(1,1) primary key,
Debit int null,
Credit int null
);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (10, 0);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (0, 40);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (50, 0);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (0, 10);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (0, 10);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (100, 10);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (0, 10);
INSERT INTO @RunTotalTestData (debit, Credit) VALUES (0, 110);
;WITH tempDebitCredit AS (
SELECT a.id, a.debit, a.credit, a.Debit - a.Credit 'diff'
FROM @RunTotalTestData a
)
SELECT a.id, a.Debit, a.Credit, SUM(b.diff) 'Balance'
FROM tempDebitCredit a,
tempDebitCredit b
WHERE b.id <= a.id
GROUP BY a.id,a.Debit, a.Credit
Выход:
id Debit Credit Balance
1 10 0 10
2 0 40 -30
3 50 0 20
4 0 10 10
5 0 10 0
6 100 10 90
7 0 10 80
8 0 110 -30