首页 > 解决方案 > 如何正确地将 SQL 行转换为列?

问题描述

在有人提到它之前,我已经在 Stack 上看到了完全相同的 SQL 问题,从我的角度来看,这实际上是将列转换为行。我想要完成的工作如下图所示,鉴于顶部,我想创建一个新表,其中包含在这个意义上翻转的先前数据。 在此处输入图像描述

在此处输入图像描述

标签: mysqlsql

解决方案


您可以使用条件聚合,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 

SQLFiddle


推荐阅读