我正在处理一个数据透视表查询。
数据结构如下:
学号,姓名,地区
同一个人的姓名可能会出现在多个不同的地区。例如,以样本数据为例。
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” 的输出将返回一个单列,每行都有一个区名,我希望将其转置到列中。