【发布时间】:2009-10-21 09:51:49
【问题描述】:
我正在处理数据透视表查询。 架构如下
Sno、名称、地区
同名可能出现在多个地区例如以样本数据为例
1 Mike CA
2 Mike CA
3 Proctor JB
4 Luke MN
5 Luke MN
6 Mike CA
7 Mike LP
8 Proctor MN
9 Proctor JB
10 Proctor MN
11 Luke MN
如您所见,我有一组 4 个不同的地区(CA、JB、MN、LP)。现在我想通过将名称映射到地区来获取为其生成的数据透视表
Name CA JB MN LP
Mike 3 0 0 1
Proctor 0 2 2 0
Luke 0 0 3 0
我为此编写了以下查询
select name,sum(if(District="CA",1,0)) as "CA",sum(if(District="JB",1,0)) as "JB",sum(if(District="MN",1,0)) as "MN",sum(if(District="LP",1,0)) as "LP" from district_details group by name
但是,地区可能会增加,在这种情况下,我将不得不再次手动编辑查询并将新地区添加到其中。
我想知道是否有一个查询可以动态获取不同地区的名称并运行上述查询。我知道我可以通过一个程序来完成并即时生成脚本,还有其他方法吗?
我之所以这么问,是因为查询“select distinct(districts) from district_details”的输出将返回给我一列,每行都有地区名称,我希望将其转换为列。
【问题讨论】:
-
看看mysql的GROUP_CONCAT()函数。
标签: sql mysql pivot-table