2016-07-22 48 views
0

我有一個表格存儲買家和供應商之間的交易,交易按表示信用票據或發票的「doctype」分類。我正嘗試創建一個視圖,顯示相同交易的類似邊界的視圖。MYSQL CASE問題

SELECT 
SUM(CASE doctype WHEN doctype = 1 THEN docvalue END) AS Invoice, 
SUM(CASE doctype WHEN doctype = 2 THEN docvalue END) AS CreditNote, 
SUM(CASE doctype WHEN doctype = 3 THEN docvalue END) AS JournalEntry, 
SUM(CASE doctype WHEN doctype = 4 THEN docvalue END) AS Payment 
FROM transactions 
group by buyer 

當我運行此查詢時,我看到第一個CASE語句的結果,但其餘的返回空值。有一個更好的方法嗎?

我的目標是將此作爲視圖,但我甚至無法獲得查詢以顯示我想要的內容。我也嘗試過下面的一個可怕的黑客,但它甚至不工作

SELECT 
(sum(docvalue) 
    FROM transactions where doctype =1) as invoices, 
(sum(docvalue) 
    FROM transactions where doctype =2) as creditnotes, 
(sum(docvalue) 
    FROM transactions where doctype =3) as journals, 
(sum(docvalue) 
    FROM transactions where doctype =4) as payments 
from transactions 

我會把我的頭髮掉,但我是禿頭!

+1

有兩種形式的CASE表達式。 「**'如果條件爲THEN ...'**」和「**'CASE表達式當值THEN ...'**」。 – spencer7593

回答

1

CASE的語法不正確。這裏是一個修改版本:

SELECT 
SUM(CASE doctype WHEN 1 THEN docvalue END) AS Invoice, 
SUM(CASE doctype WHEN 2 THEN docvalue END) AS CreditNote, 
SUM(CASE doctype WHEN 3 THEN docvalue END) AS JournalEntry, 
SUM(CASE doctype WHEN 4 THEN docvalue END) AS Payment 
FROM transactions 
group by buyer 
+0

謝謝,我很尷尬,這是多麼明顯! – Daniel

+0

您是否有建議的方法將這些值作爲「總計」列進行計算? – Daniel