Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:选择每个术语作为GROUPBY语句中的一列_Mysql_Group By - Fatal编程技术网

MySQL:选择每个术语作为GROUPBY语句中的一列

MySQL:选择每个术语作为GROUPBY语句中的一列,mysql,group-by,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

我在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
Etc.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,所以需要花费很长时间来编写,但这是我能想到的最好的方法。

您正在寻找一个聚合函数。对于四列:

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;

那么你可能有700个不同的ID 1,2,3…700?是的。和700个不同的栏目。不方便但却是必要的,不幸的是,在这种情况下,您将需要使用动态sql来生成透视表。检查mysql dynamic pivot,确保您的列号不超过4096。数据显示问题在应用程序层/表示层代码中得到解决。对于700个值,这一定是疯了