Вот моя таблица.
pk | transactionID
| description
| transactionDate
| transactionAmount
| accountRecieve
| accountSend
Это мои колонки. Мне нужно найти баланс с учетом accountNumber через запрос. Для этого мне нужно SUM transactionAmount, где accountSend = 127, а затем SUM transactionAmount, где accountRecieve = 127, а затем вычесть первую сумму из второй суммы и показать ее в одном результате.
Я могу это объяснить, но понятия не имею, как это выполнить в SQL. Может ли кто-нибудь помочь.


Один из вариантов использует условное агрегирование:
SELECT
SUM(IIF(accountReceive = 127, transactionAmount, 0)) -
SUM(IIF(accountSend = 127, transactionAMount, 0)) AS diff
FROM yourTable;
Идея состоит в том, чтобы просто выполнить один проход по всей таблице, суммируя сумму транзакции с использованием двух критериев.
Доступ не поддерживает CASE
@RhysSwansbra Я, должно быть, пропустил тег доступа. Ответ обновлен.
Вы также можете выразить это с помощью switch:
SELECT SUM(SWITCH(accountReceive = 127, transactionAmount
accountSend = 127, - transactionAMount, 0,
1=1, 0
)
) AS diff
FROM yourTable;
Это использует только один SUM() и более аналогично использованию CASE в других базах данных.
Для справки в будущем правильный тег для Access -
ms-access.