MySQL - 如何将列转为行?

标签 mysql sql union unpivot lateral-join

此时我可能还不太清楚,但我在 MySQL 中有一个如下所示的表:

ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2

出于某种原因(实际上是在另一个表上加入 - 基于 ID,但我认为如果有人可以帮助我完成这部分,我可以自己完成剩下的工作),我需要这些行改为这样:

1 | a1 | a
1 | b1 | b
1 | c1 | c
2 | a2 | a
2 | b2 | b
2 | c2 | c

所以基本上,我需要查看如下行:IDcolumntitlevalue 有什么方法可以轻松做到这一点?

最佳答案

您正在尝试取消透视数据。 MySQL 没有 unpivot 函数,因此您必须使用 UNION ALL 查询将列转换为行:

select id, 'a' col, a value
from yourtable
union all
select id, 'b' col, b value
from yourtable
union all
select id, 'c' col, c value
from yourtable

SQL Fiddle with Demo .

这也可以使用 CROSS JOIN 来完成:

select t.id,
  c.col,
  case c.col
    when 'a' then a
    when 'b' then b
    when 'c' then c
  end as data
from yourtable t
cross join
(
  select 'a' as col
  union all select 'b'
  union all select 'c'
) c

SQL Fiddle with Demo

关于MySQL - 如何将列转为行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184381/

相关文章:

mysql - 选择前 N 行并处理并列情况

sql - 如何在 heroku 上执行 .sql 脚本?

mysql - PHP SQL 查询中的 UNION、SUM 和 count(*) 一起使用

mysql存储过程和参数

php - 全新安装 Laravel 5.2 Make :Auth onRegister does nothing

mysql - 正确显示第二个表中具有多个匹配项的 mySQL LEFT JOIN

PHP MYSQL 无法在表中存储对象属性

sql - PostgreSQL SSPI 身份验证 - fatal error : 2801: password authentication failed for user "xxx"

MySQL - 结合 SELECT 两个表

java - 如何实现集合论与对象集的并集和交集