MySQL:选择每个术语作为group by语句中的列

时间:2015-04-26 19:22:17

标签: mysql group-by

我在MySQL中有这样的表:

PersonID    id        X
1           1         0
1           2         1
1           3         1
1           4         1
2           1         1
2           2         0
2           3         0
2           4         1
3           1         1
3           2         0

等。 X是二进制 - 1或0.只是假设它是随机的。

我想得到这样的查询结果:

PersonID   X1   X2   X3   X4
1          0    1    1    1
2          1    0    0    1
3          1    0    NULL NULL

我该怎么做?我尝试过以下方法:

select 
PersonID, 
case when id = 1 then X else NULL end as X1, 
case when id = 2 then X else NULL end as X2,
et cetera
from table 
group by PersonID

这显然是错误的并且需要永远写作(因为每个人最多有700个不同的ID),但这是我能想到的最好的。

1 个答案:

答案 0 :(得分:0)

您正在寻找聚合功能。对于四列:

select PersonID, 
       max(case when id = 1 then X else NULL end) as X1, 
       max(case when id = 2 then X else NULL end) as X2,
       max(case when id = 3 then X else NULL end) as X3,
       max(case when id = 4 then X else NULL end) as X4
from table 
group by PersonID;

我担心编写代码,只需将id列表放在电子表格中,使用公式生成相应的代码,然后将其复制回SQL查询。

如果您拥有未知数量的ID,则可能需要使用动态SQL。或者,您可以将值连接在一起:

select PersonID, 
       group_concat(x order by id) as xs
from table 
group by PersonID;