mysql unpivot
时间: 2023-07-08 19:48:19 浏览: 152
MySQL并没有原生的UNPIVOT函数,但可以通过UNION ALL操作实现类似的功能。
假设有以下表格:
```sql
CREATE TABLE mytable (
id INT,
col1 INT,
col2 INT,
col3 INT
);
INSERT INTO mytable VALUES (1, 10, 20, 30);
INSERT INTO mytable VALUES (2, 40, 50, 60);
```
现在需要将列col1、col2、col3转换成行。
可以使用UNION ALL操作来实现:
```sql
SELECT id, 'col1' AS col_name, col1 AS col_value FROM mytable
UNION ALL
SELECT id, 'col2' AS col_name, col2 AS col_value FROM mytable
UNION ALL
SELECT id, 'col3' AS col_name, col3 AS col_value FROM mytable;
```
以上语句会返回以下结果:
```
+----+----------+-----------+
| id | col_name | col_value |
+----+----------+-----------+
| 1 | col1 | 10 |
| 1 | col2 | 20 |
| 1 | col3 | 30 |
| 2 | col1 | 40 |
| 2 | col2 | 50 |
| 2 | col3 | 60 |
+----+----------+-----------+
```
其中,UNION ALL操作会将三个SELECT语句的结果合并为一个结果集。在每个SELECT语句中,使用常量来表示列名,并将列值赋给另一个列。最终得到的结果集就是原始表格的列col1、col2、col3转换成行的结果。
阅读全文