MySQL - 如何将列转为行?

标签 mysql sql union unpivot lateral-join

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

如何将行重新组织为 IDcolumntitlevalue

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

最佳答案

您正在尝试反透视 数据。 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/50121830/

相关文章:

php - 警告 : mysql_fetch_array() expects parameter 1 to be resource, 等中给出的 bool 值

php - 不能在 UPDATE 查询中使用子查询?

sql - 搜索整个数据库而不是单个表

java - 使用身份 id 在 derby 中导入数据

mysql - 如何编写这个简单的 MySQL JOIN 查询?

mysql - SQL - Where...In 子句中的选择联合

mysql - 递归连接sql中的列

mysql - 优化23张表的慢sql查询

sql - 按定义的条件从表中选择列的次数

mysql - 如何创建友情关系sql(mysql)?