我有一些包含数据的表,我正在尝试生成如下格式的数据透视表:
面积 | 类型 | 2013-08-25 | 2013-08-26 | 2013-08-27等.. 南 | 红色 | 5 | 2 | 9 北 | 蓝色 | 3 | 0 | 7
目前为了生成这个,我使用 PHP 循环遍历每个日期并根据给定的开始和结束日期为每个日期生成 sum(if 语句。
我知道我可以在之前运行查询并按日期分组,然后在 PHP 中组装它,但 SQL 解决方案似乎比这更容易。
这是完成我想做的事情的最佳方式,还是我错过了另一种更简单的方式?
示例查询:
SELECT
iw.display_name as Area,
iet.type as 'Type',
sum(if(date(iac.created_at) = '2013-08-25',1,0)) as '2013-08-25',
sum(if(date(iac.created_at) = '2013-08-26',1,0)) as '2013-08-26',
sum(if(date(iac.created_at) = '2013-08-27',1,0)) as '2013-08-27',
sum(if(date(iac.created_at) = '2013-08-28',1,0)) as '2013-08-28',
sum(if(date(iac.created_at) = '2013-08-29',1,0)) as '2013-08-29',
sum(if(date(iac.created_at) = '2013-08-30',1,0)) as '2013-08-30',
sum(if(date(iac.created_at) = '2013-08-31',1,0)) as '2013-08-31',
count(iac.id) as total
FROM iac
JOIN ioc on ioc.id = iac.ioc_id
JOIN iet on iet.id = ioc.iet_id
JOIN iw on iw.id = iac.iw_id
WHERE date(iac.created_at) between '2013-08-25' and '2013-08-31'
GROUP BY iw.id, iet.id
ORDER BY iw.display_name, iet.type