0

私は3つのテーブルを持っています:

お客様

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

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
于 2012-11-01T09:48:34.573 に答える