0

我有三张桌子:

顾客

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
4

3 回答 3

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
于 2012-11-01T09:49:15.397 回答
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

您也可以在线测试它

注意:我不知道如何确定Balace,所以我只是通过 计算它Debit - Credit

于 2012-11-01T09:47:58.720 回答
1

推断 save_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
于 2012-11-01T09:48:34.573 回答