我在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),但这是我能想到的最好的。
答案 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;