MySQL中不使用PIVOT函数实现表旋转的方法求助
MySQL 无PIVOT实现表旋转方案
前提假设
假设你的原始表(附图1)结构类似这样(以original_table为例):
| id | type | value |
|---|---|---|
| 1 | 1 | 100 |
| 1 | 2 | 200 |
| 1 | 3 | 300 |
| 1 | 4 | 400 |
| 2 | 1 | 150 |
| 2 | 2 | 250 |
| 2 | 3 | 350 |
| 2 | 4 | 450 |
期望结果表(附图2)是将type的1/2/3/4转为列,每个id对应一行:
| id | type_1 | type_2 | type_3 | type_4 |
|---|---|---|---|---|
| 1 | 100 | 200 | 300 | 400 |
| 2 | 150 | 250 | 350 | 450 |
实现SQL代码
利用GROUP BY结合IF函数即可完成行转列,无需PIVOT:
SELECT id, MAX(IF(type = 1, value, NULL)) AS type_1, MAX(IF(type = 2, value, NULL)) AS type_2, MAX(IF(type = 3, value, NULL)) AS type_3, MAX(IF(type = 4, value, NULL)) AS type_4 FROM original_table GROUP BY id;
代码说明
GROUP BY id:保证每个id只输出一行结果IF(type = X, value, NULL):判断当前行的type是否为目标值,是则取对应的value,否则返回NULLMAX()聚合函数:因为每个id+type组合只会有一条有效数据(其他为NULL),MAX会自动忽略NULL,保留对应type的真实值。如果同一id+type有多条记录,可根据需求替换为SUM()求和或MIN()取最小值
内容的提问来源于stack exchange,提问作者informatica
相关产品推荐
相关产品推荐

