- я бы использовал существующий столбец идентификаторов, чтобы быть на 100% уверенным, что я имею дело с правильной транзакцией.
SELECT t.Created, t.Description, t.Credit, t.Debit, t.TransDate, t.TransactionID, ba.AccountID,
(isnull(t.Credit,0)-isnull(t.Debit,0))+COALESCE((SELECT SUM(isnull(Credit,0)) - SUM(isnull(Debit,0))
FROM Transactions b
WHERE b.TransactionID < t.TransactionID
and b.AccountID = t.AccountID),0)
AS RunningTotal
FROM Transactions t
INNER JOIN dbo.BankAccounts ba ON t.AccountID = ba.AccountID
- также если вы измените «Меньше чем» на «Меньше или равно», то вам не нужно добавлять текущий элемент:
SELECT t.Created, t.Description, t.Credit, t.Debit, t.TransDate, t.TransactionID, ba.AccountID,
COALESCE((SELECT SUM(isnull(Credit,0)) - SUM(isnull(Debit,0))
FROM Transactions b
WHERE b.TransactionID <= t.TransactionID
and b.AccountID = t.AccountID),0)
AS RunningTotal
FROM Transactions t
INNER JOIN dbo.BankAccounts ba ON t.AccountID = ba.AccountID
Итого должно быть: (при условии) Стартовый баланс: 49,25
TransDate Credit Debit RunningTotal
----------------------- ----------------- -------------- -----------------
2011-10-08 20:14:00 NULL 12 37.25
2011-10-08 20:14:00 2.11 NULL 39.36
2011-10-07 20:14:00 42.25 NULL 81.61
2011-10-06 20:14:00 NULL 12.25 69.36
2011-10-05 20:14:00 31.25 NULL 100.61