2016-08-24 144 views
3

假設我有一個帳戶項移動表,就像mysql - 我可以從同一列中選擇值並將它們顯示在2列結果中嗎?

ACCOUNTS table 
+-------+------+---------+ 
| title | side | balance | 
+-------+------+---------+ 
| cash | debit| 500.0 | 
+-------+------+---------+ 
| cash |credit| 300.0 | 
+-------+------+---------+ 
| cash |credit| 600.0 | 
+-------+------+---------+ 
#..... more than 10'000 debit and credit rows 

我想組信用行之和借記行的總和,並顯示在不同的列他們的每一筆。

什麼,我試圖做的是總結在兩側的羣體的平衡,就像

select title, side, sum(balance) from accounts group by side 

我得到行,一個爲借方金額,另一個是信貸總和,像

+-------+------+---------+ 
| cash | debit| 500.0 | 
+-------+------+---------+ 
| cash |credit| 900.0 | 
+-------+------+---------+ 



我想是獲得整個導致一個結果行,德的總和一個字段中的位和另一個字段中的信用總和。我想最終的結果是這樣的

+-------+-------+-------+ 
| cash | 500.0 | 900.0 | 
+-------+-------+-------+ 

謝謝。

+1

選擇信用額度並將其加入借方或vica的總和? – Jacobr365

+0

@ Jacobr365謝謝。這是我首先想到的,但我做不到。你能給我一個加入同一個表的簡單例子! –

回答

4

您可以使用情況

select title, sum(case side when 'debit' then balance else 0 end), 
    sum(case side when 'credit' then balance else 0 end) 
from accounts 
group by title 
+0

看起來像你在那裏留下了一個'內部連接'。 –

+0

@JohnBoker ..謝謝..沒有內心..只是一個錯字.. – scaisEdge

+0

謝謝,這就是我一直在尋找。我無法在SQL W3學校中找到此聲明。 'case'語句是一個SQL還是隻適用於mysql? –

1

下面是使用子查詢的一個例子。比已經提供的CASE語句冗長得多,但是如果你最終擁有多個標題或者想要進行計算,它就會變得非常簡單。

SELECT 
    title 
    ,credit.credit_balance 
    ,debit.debit_balance 
    ,(credit.credit_balance - debit.debit_balance) AS net 
FROM 
    (SELECT 
     title, 
     sum(balance) debit_balance 
    FROM accounts 
    WHERE 
     side = 'debit' 
    GROUP BY side) debit 
INNER JOIN (
    SELECT 
     title, 
     sum(balance) debit_balance 
    FROM accounts 
    WHERE 
     side = 'credit' 
    GROUP BY side) credit ON debit.title = credit.title 
GROUP BY 
    title; 
+0

感謝您的時間,我從來沒有嘗試子查詢,但我會嘗試它們 –

相關問題