У меня есть список транзакций в таблице для пользователя, который записывает: UserID, DateTime, TransactionType и Value. TransactionID - это автоматический прирост первичного ключа. 1. TransactionType определяет вклад (1) или снятие (2), поэтому все значения положительны в таблице. Я пытаюсь создать отчет об учетной записи с общей суммой.Выписка из транзакций SQL
TransactionID UserID DateTime TransactionTypeID Value
1 3112 01-04-2016 12:00 1 5.00
3 3112 01-04-2016 13:00 2 2.00
5 3112 01-04-2016 13:25 2 1.00
8 3112 02-04-2016 12:00 1 10.00
9 3112 02-04-2016 12:35 2 4.00
В основном я хочу создать бегущее заявление счетов запроса с Общей стоимостью создания:
DateTime TransactionTypeID Deposit Withdrawal Balance
01-04-2016 12:00 1 5.00 5.00
01-04-2016 13:00 2 2.00 3.00
01-04-2016 13:25 2 1.00 2.00
02-04-2016 12:00 1 10.00 12.00
02-04-2016 12:35 2 4.00 8.00
Я попытался с помощью OUTER APPLY, чтобы выбрать предыдущую транзакцию, но с не превалирую в одном запрос. Любая помощь будет оценена
SELECT
[UserID], [DateTime],
T.[Value] *
(CASE
WHEN [TransactionTypeID] IN (1, -- deposit
2 -- withdrawal
)
THEN -1
ELSE 1
END),
T2.Value AS PrevValue
FROM
[Transaction] T
OUTER APPLY
(SELECT TOP 1 T2.[Value]
FROM [Transaction] T2
WHERE UserID = 3112
AND T2.[TransactionID] > T.TransactionID
ORDER BY T2.TransactionID) AS T2
WHERE
T.[UserID] = 3112
ORDER BY
T.[TransactionID] DESC
вывод этого запроса не соответствует критериям в OP .. просто вычитает каждое значение независимо от того, является ли он депозитом или снятием – JamieD77