mySQL Pivot查询 - SUM()的麻烦

时间:2016-02-06 22:00:47

标签: mysql sql mysqli pivot-table

我有以下查询:

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

1 个答案:

答案 0 :(得分: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')