MySQL如何将单行数据转换为两列?非重复问题求解
MySQL 查询结果格式转换方案示例
假设你遇到的是行转列这类常见的格式转换需求(这是MySQL里最常碰到的格式转换场景之一),我给你举个具体的例子来演示怎么实现:
原查询结果(比如用户订单按月份的明细)
| user_id | month | amount |
|---|---|---|
| 1 | 一月 | 100 |
| 1 | 二月 | 200 |
| 2 | 一月 | 150 |
目标格式(把月份转成列,按用户汇总)
| user_id | 一月 | 二月 |
|---|---|---|
| 1 | 100 | 200 |
| 2 | 150 | 0 |
实现SQL语句
你可以用CASE WHEN结合聚合函数来实现:
SELECT user_id, SUM(CASE WHEN month = '一月' THEN amount ELSE 0 END) AS '一月', SUM(CASE WHEN month = '二月' THEN amount ELSE 0 END) AS '二月' FROM your_table_name GROUP BY user_id;
如果是列转行的反向需求,比如把多列转成多行,可以用UNION ALL来处理:
原查询结果
| user_id | 一月 | 二月 |
|---|---|---|
| 1 | 100 | 200 |
| 2 | 150 | 0 |
目标格式
| user_id | month | amount |
|---|---|---|
| 1 | 一月 | 100 |
| 1 | 二月 | 200 |
| 2 | 一月 | 150 |
| 2 | 二月 | 0 |
实现SQL语句
SELECT user_id, '一月' AS month, 一月 AS amount FROM your_table_name UNION ALL SELECT user_id, '二月' AS month, 二月 AS amount FROM your_table_name ORDER BY user_id, month;
要是你的需求是其他格式转换(比如拼接字符串、分组合并等),直接把你的原查询结果样例和目标格式样例贴出来,我再给你针对性的方案。
内容的提问来源于stack exchange,提问作者Sunil Kothiyal
相关产品推荐
相关产品推荐

