首页 > 解决方案 > 在 phpmyadmin 中从列转换为行

问题描述

我有一个数据库,我需要将列转换为行。

+--------+------+-----+-----+
| ID     | Name |  A  |  B  |
+--------+------+-----+-----+
|   1    |  xyz |  3  |  1  |
|   2    |  abc |  4  |  6  |
+--------+------+-----+-----+ 

如果可以减少冗余并制作另一个表来传递ID,我需要像这样显示吗?

+--------+----------+-----------+---------+
| ID     |  Name    |   Type    |  Cost   |
+--------+----------+-----------+---------+
|   1    |    xyz   |    A      |   3     |
|   1    |    xyz   |    B      |   1     |
|   2    |    abc   |    A      |   4     |
|   2    |    abc   |    B      |   6     |
+--------+----------+-----------+---------+

请给我这个查询的任何解决方案....

提前致谢

标签: mysqlsqlunpivot

解决方案


您想将列取消透视到行。在 MySQL 中,这通常通过以下方式完成union all

select id, name, 'A' as type, A as cost from mytable
union all select id, name, 'B', B from mytable

最新版本的 MySQL 支持横向连接,这有助于稍微缩短语法,并提高查询效率(表只扫描一次):

select t.id, t.name, x.*
from mytable t
cross join lateral (select 'A', a union all select 'B', b) x(type, cost)

推荐阅读