我有三张桌子:
客户
customer_id first_name
1 kapil
2 rajesh
帐户
Customer_id Account_id
1 S1
2 s2
收据
Recipt_id customer_id Account_id Transaction_type Amount
R1 1 s1 Deposit 40000
R2 2 s2 Deposit 300
R3 1 s1 withdrawal 2000
现在我将查询如下
select
c.customer_id,c.first_name,s.current_balance,s.account_id,
(select sum(amount)
from receipt as r ,
saving_account as s
where r.transaction_type='deposit'
and r.account_no = s.account_id
) as debit,
(select sum(amount)
from receipt as r ,
saving_account as s
where r.transaction_type='withdrawl'
and r.account_no = s.account_id
)as credit
from customer as c
left outer join saving_account as s
inner join receipt as r on r.customer_id = s.customer_id
on s.customer_id = c.customer_id
group by c.customer_id
但是它给了我一笔整行和借记的单一值 我不明白为什么会这样表现出来......
我想要的结果是:
customer_id customer_name account_id debit credit balance
1 kapil s1 40000 2000 200
2 rajesh s2 300 null 500
答案 0 :(得分:5)
SELECT customer_ID, first_name, Account_ID,
Deposit, Withdrawal,
(Deposit - Withdrawal) balance
FROM
(
SELECT a.customer_ID,
a.first_name,
b.Account_ID,
SUM (CASE WHEN c.transaction_type = 'Deposit' THEN c.Amount ELSE 0 END) Deposit,
SUM (CASE WHEN c.transaction_type = 'withdrawal' THEN c.Amount ELSE 0 END) Withdrawal
FROM customer a
INNER JOIN Account b
ON a.customer_ID = b.customer_ID
LEFT JOIN Receipt c
ON b.customer_ID = c.customer_ID AND
b.account_ID = c.Account_ID
GROUP BY a.customer_ID, a.first_name, b.Account_ID
) bb
答案 1 :(得分:3)
试试这个:
select
c.customer_id,
c.first_name,
a.account_id,
sum(case
when r.transaction_type='deposit' then r.Amount
else 0
end) as Debit,
sum(case
when r.transaction_type='withdrawal' then r.Amount
else 0
end) as Credit,
sum(case
when r.transaction_type='deposit' then r.Amount
else 0
end)-
sum(case
when r.transaction_type='withdrawal' then r.Amount
else 0
end) as balance
from customer c
join account a
on c.customer_id = a.customer_id
join Receipt r
on a.account_id = r.account_id
group by
c.customer_id,
c.first_name,
a.account_id
您还可以test it online。
注意:我不知道如何确定Balace
,所以我只是按Debit - Credit
计算出来。
答案 2 :(得分:1)
在saving_account表上推断current_balance列:
Select
c.customer_id,
c.customer_name,
s.account_id,
sum(case when r.transaction_type = 'Deposit' Then r.Amount Else 0 End) As debit,
sum(case when r.transaction_type = 'Withdrawal' Then r.Amount Else 0 End) as credit,
s.current_balance
From
customer c
left outer join
saving_account s
on c.customer_id = s.customer_id
left outer join
receipt r
on s.customer_id = r.customer_id and s.account_id = r.account_id
Group By
c.customer_id,
c.customer_name,
s.account_id,
s.current_balance