2016-07-22 7 views
0

私は買い手とサプライヤ間のトランザクションを格納するテーブルを持っていますが、取引はクレジットメモや請求書を示す「doctype」で分類されます。私は同じトランザクションのlegderのようなビューを表示するビューを作成しようとしています。MYSQLのケース問題

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文の結果が表示されますが、残りの部分はnull値を返します。これを行うより良い方法はありますか?

私の目標はこれをビューにすることですが、私が望むものを表示するためのクエリを取得することさえできません。私は私の髪をかきむしるだろうが、私ははげてる私もひどいハックとして以下しようとしたが、それも

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式には2つの形式があります。 "**'条件が満たされたときのケース... ** **と** ** 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