2016-07-22 5 views
0

У меня есть таблица, в которой хранятся транзакции между покупателем и поставщиком, транзакции классифицируются по типу «doctype», обозначающему кредитную ноту или счет-фактуру. Я пытаюсь создать представление, которое отображает однопользовательский вид одних и тех же транзакций.Проблема с CASE с 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, но остальные возвращают нулевые значения. Есть лучший способ сделать это?

Моя цель - иметь это как представление, но я даже не могу получить запрос, чтобы показать, что я хочу. Я также попробовал следующее как ужасный взлом, но он даже не работает

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. "**' CASE WHEN условие THEN ... '**" и "**' выражение CASE WHEN значение 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

Смежные вопросы