2016-07-22 42 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