Mysql 如何正确地将SQL行转换为列?

Mysql 如何正确地将SQL行转换为列?,mysql,sql,Mysql,Sql,在有人提到它之前,我已经在堆栈上看到了完全相同的SQL问题,从我的角度来看,这实际上是将列转换为行。我试图完成的是,如下图所示,鉴于上面的一张,我想用以前的数据创建一个新表,在这个意义上,这些数据被翻转了。 您可以按如下方式使用条件聚合和union all: select name_new, max(case when name = 'PersonA' then A end) as PersonA, max(case when name = 'PersonB' t

在有人提到它之前,我已经在堆栈上看到了完全相同的SQL问题,从我的角度来看,这实际上是将列转换为行。我试图完成的是,如下图所示,鉴于上面的一张,我想用以前的数据创建一个新表,在这个意义上,这些数据被翻转了。


您可以按如下方式使用条件聚合和
union all

select name_new, 
       max(case when name = 'PersonA' then A end) as PersonA,
       max(case when name = 'PersonB' then A end) as PersonB,
       max(case when name = 'PersonC' then A end) as PersonC
from 
(select name, 'A1' name_new, A1 A from mytable union all
select name, 'A2' name_new, A2 A from mytable union all
select name, 'A3' name_new, A3 A from mytable union all
select name, 'A4' name_new, A4 A from mytable ) t
group by name_new 

您可以按如下方式使用条件聚合和
union all

select name_new, 
       max(case when name = 'PersonA' then A end) as PersonA,
       max(case when name = 'PersonB' then A end) as PersonB,
       max(case when name = 'PersonC' then A end) as PersonC
from 
(select name, 'A1' name_new, A1 A from mytable union all
select name, 'A2' name_new, A2 A from mytable union all
select name, 'A3' name_new, A3 A from mytable union all
select name, 'A4' name_new, A4 A from mytable ) t
group by name_new 

如果我要去那里,你可以检查这个,我不会从这里开始:-(如果我要去那里,你可以检查这个,我不会从这里开始:-)(新名称代表什么?请参见子查询-->
(选择name,'A1'name_new,
——我刚刚给了A1,A2一个别名……还检查了更新后的答案,在最后的选择中,我给了alias
name
一个新的
name_new
我不明白的是什么,组中使用的别名是不正确的。如果我要用t创建一个新表,我已经用SQLFiddle更新了答案他的新格式,我必须手动进行还是?我正在尝试打印所有为空的列,比如说Person A,这就是为什么我试图操纵表并在Person A列传递一个where子句,以表示null,name_new代表什么?请参见子查询-->
(选择name,'A1'name_new,
——我刚刚给了A1,A2一个别名……还检查了更新后的答案,在最后的选择中,我给了alias
name
一个新的
name_new
我不明白的是什么,组中使用的别名是不正确的。如果我要用t创建一个新表,我已经用SQLFiddle更新了答案他的新格式,我必须手动进行吗?我正在尝试打印所有为空的列,比如Person A,这就是为什么我试图操纵表并在Person A列传递一个where子句