2016-02-06 4 views
1

У меня есть следующий запрос:MySql Сводные запросы - проблемы с SUM()

select 
extract(year from p.when_paid) yyyy, 
MONTHNAME(STR_TO_DATE(extract(month from p.when_paid), '%m')) mm, 
f.name, 
IF(p.payment_type_id = 1,SUM(p.amount),null) MedPay, 
IF(p.payment_type_id = 2,SUM(p.amount),null) Liability, 
IF(p.payment_type_id = 3,SUM(p.amount),null) WC, 
IF(p.payment_type_id in (8,9),SUM(p.amount),null) VA, 
IF(p.payment_type_id = 10,SUM(p.amount),null) Health 
from services s 
join payments p on p.service_id = s.id 
join accounts a on a.id = s.account_id 
join facilities f on f.id = a.facility_id 
GROUP BY f.name, yyyy, mm 
ORDER BY f.name ASC; 

Прямо сейчас я могу получить таблицу для заполнения, но не сортирует по payment_type. Например, он будет суммировать все платежи в MedPay или Liability, но не будет разделять их как сводную таблицу. Какой был бы лучший способ сделать это? Вот структура таблицы:

amount  when_paid payment_type_id 
--------------------------------------- 
500  2013-02-02   2 
400  2013-02-02   3 
250  2013-02-02   2 

Я хочу, чтобы выход выглядеть

yy mm name MedPay Liability WC VA Health 
---------------------------------------------------- 
2013 2 Fact  750  400 

ответ

2
IF(p.payment_type_id = 1,SUM(p.amount),null) 

->

SUM(IF(p.payment_type_id = 1, p.amount, 0)) 

Или вы могли бы изменить 0 к NULL. Я думаю, что это закончится пустым значением, а не 0 (если в таблице нет записей type_id=1).

Или, чтобы получить "никто" не отображается:

IFNULL(SUM(IF(p.payment_type_id = 1, p.amount, NULL)), 'none') 
+0

работал идеально, спасибо! – Rob

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