sql列转行 行转列
在SQL中,将列转换为行通常使用UNION ALL
操作,而将行转换为列通常使用PIVOT
操作(在支持该操作的SQL版本中)。
以下是一个简单的例子:
假设有一个表sales
,结构如下:
year | product | amount
-----|---------|-------
2020 | A | 100
2020 | B | 150
2021 | A | 200
2021 | B | 240
将product
列转换为行,可以使用UNION ALL
:
SELECT year, 'A' AS product, amount FROM sales WHERE product = 'A'
UNION ALL
SELECT year, 'B' AS product, amount FROM sales WHERE product = 'B';
结果将是:
year | product | amount
-----|---------|-------
2020 | A | 100
2021 | A | 200
2020 | B | 150
2021 | B | 240
如果想要使用PIVOT
将行转为列(以支持PIVOT的SQL数据库为例):
SELECT year,
SUM(CASE WHEN product = 'A' THEN amount ELSE 0 END) AS A,
SUM(CASE WHEN product = 'B' THEN amount ELSE 0 END) AS B
FROM sales
GROUP BY year;
结果将是:
year | A | B
-----|------|------
2020 | 100 | 150
2021 | 200 | 240
这些操作可以根据具体的数据库系统(如MySQL, SQL Server, PostgreSQL等)的功能进行调整。
评论已关闭