Поскольку вы не сказали нам , что происходит не так (то есть опишите поведение, которое вы получаете в дополнение к описанию поведения, которое вы ожидаете), трудно сказать, где, но есть пара возможностей. Нил указывает на один. Другое состоит в том, что, поскольку вы присоединяетесь к таблице транзакций три раза, вы объединяете транзакции с транзакциями и получаете повторы. Вместо этого присоединитесь к таблице транзакций один раз и измените способ суммирования столбца Amount
.
Select
a.ACCOUNT_ID,
a.BANK_NAME,
a.LOCALE,
a.STATUS,
sum(t.AMOUNT) as BALANCE,
sum((t.AMOUNT < 0) * t.AMOUNT) As OUTGOING,
sum((t.AMOUNT > 0) * t.AMOUNT) As INCOMING
From ACCOUNT a
Left Join TRANSACTION t On t.ACCOUNT_ID = a.ACCOUNT_ID
Group By a.ACCOUNT_ID, a.BANK_NAME, a.LOCALE, a.[STATUS]
Вы можете использовать CASE
выражений в качестве более удобочитаемой альтернативы умножениям:
Select
a.ACCOUNT_ID,
a.BANK_NAME,
a.LOCALE,
a.[STATUS],
sum(t.AMOUNT) As BALANCE,
sum(CASE WHEN t.AMOUNT < 0 THEN t.AMOUNT ELSE 0 end) As OUTCOME,
sum(CASE WHEN t.AMOUNT > 0 THEN t.AMOUNT ELSE 0 end) As INCOME
From ACCOUNT a
Left Join [TRANSACTION] t On t.ACCOUNT_ID = a.ACCOUNT_ID
Group By a.ACCOUNT_ID, a.BANK_NAME, a.LOCALE, a.[STATUS]