使用子查询的sum函数

Ash*_*ngh 0 sql t-sql sql-server

我有三张桌子:

顾客

customer_id   first_name
1              kapil
2              rajesh
Run Code Online (Sandbox Code Playgroud)

帐户

Customer_id     Account_id
1                   S1
2                   s2
Run Code Online (Sandbox Code Playgroud)

收据

Recipt_id   customer_id   Account_id   Transaction_type   Amount
R1            1              s1         Deposit           40000
R2            2              s2         Deposit             300
R3            1              s1         withdrawal         2000
Run Code Online (Sandbox Code Playgroud)

现在我把查询如下

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
Run Code Online (Sandbox Code Playgroud)

但是它给了我一笔整个行的借记和信用太多我不明白为什么它显示那样....

我想要的结果是:

customer_id customer_name account_id debit credit balance
1           kapil         s1         40000   2000  200
2           rajesh        s2         300     null  500
Run Code Online (Sandbox Code Playgroud)

Joh*_*Woo 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
Run Code Online (Sandbox Code Playgroud)