这里有2张桌子 第一个表由10行acnumber列和10行opening_balance列组成。 第二个表由一列中的3个已经多次进行交易的字符组成 在transaction_type列中提到“存款”或“提款”和transaction_amount列。
所以我必须选择所有的号码和他们的存款,即期初余额+存款。如果表2中没有可用的交易,那么添加期初余额和0.我试过这样的事情
select a1.acnumber,a1.opening_balance+if (a1.acnumber not in (a2.acnumber),0,sum(a2.transaction_amount))
from account a1 left join trandetails a2
on a1.acnumber=a2.acnumber
where a2.transaction_type like'Deposit'
group by a2.acnumber;
但它只返回两个表中提到的acnumber。任何建议???
答案 0 :(得分:1)
您需要对查询进行多项更改。 where
正在撤消left outer join
。您应该将该条件移至on
子句。此外,group by
列应该是select
中不在聚合函数中的列。
所以,试试这个
select a1.acnumber, a1.opening_balance + coalesce(sum(a2.transaction_amount), 0)
from account a1 left join
trandetails a2
on a1.acnumber = a2.acnumber and
a2.transaction_type like 'Deposit'
group by a1.acnumber, a1.opening_balance;