【发布时间】:2011-02-14 17:53:28
【问题描述】:
我正在尝试返回包含余额、结果和收入的帐户列表
Account Transaction
------- -----------
AccountID TransactionID
BankName AccountID
Locale Amount
Status
这是我目前拥有的。有人可以解释我哪里出错了吗?
select
a.ACCOUNT_ID,
a.BANK_NAME,
a.LOCALE,
a.STATUS,
sum(t1.AMOUNT) as BALANCE,
sum(t2.AMOUNT) as OUTCOME,
sum(t3.AMOUNT) as INCOME
from ACCOUNT a
left join TRANSACTION t1 on t1.ACCOUNT_ID = a.ACCOUNT_ID
left join TRANSACTION t2 on t2.ACCOUNT_ID = a.ACCOUNT_ID and t2.AMOUNT < 0
left join TRANSACTION t3 on t3.ACCOUNT_ID = a.ACCOUNT_ID and t3.AMOUNT > 0
group by a.ACCOUNT_ID, a.BANK_NAME, a.LOCALE, a.[STATUS]
更新
已根据下面的评论更正了 t2 左连接语法。
希望从问题中可以明显看出我期望的输出。对于 6 个帐户,SQL 应返回 6 个帐户及其余额、收入和结果。
我提供的 SQL 的问题是数字错误!根据 cmets,我认为问题源于多次加入,这导致金额的总和不正确。
【问题讨论】:
-
不应该像 t2.ACCOUNT_ID = a.ACCOUNT_ID 那样在 t2 上加入 TRANSACTION t2 吗? {请编辑问题。从下面 Neil Moss 的回答中提升为评论}