在MySQL中,可以使用CASE
语句和GROUP_CONCAT
函数将行数据转换为列数据
假设有一个名为sales_data
的表,结构如下:
+----------+--------+-------+
| year | product | sales |
+----------+--------+-------+
| 2020 | A | 100 |
| 2020 | B | 200 |
| 2021 | A | 150 |
| 2021 | B | 250 |
+----------+--------+-------+
您希望将上述表转换为以下格式:
+----------+------+------+------+------+------+
| year | A | B | C | ... | N |
+----------+------+------+------+------+------+
| 2020 | 100 | 200 | 0 | ... | 0 |
| 2021 | 150 | 250 | 0 | ... | 0 |
+----------+------+------+------+------+------+
可以使用以下SQL查询实现这个需求:
SELECT year,
SUM(IF(product = 'A', sales, 0)) AS A,
SUM(IF(product = 'B', sales, 0)) AS B
FROM sales_data
GROUP BY year;
这个查询使用IF
函数来检查product
列的值,如果值为'A',则将sales
列的值累加到'A'列,否则累加0。同理,对于'B'列也是如此。最后,使用GROUP BY
子句按年份分组。