在SQL查询中,有时需要将查询结果从竖向(列)排列转换为横向(行)排列。这在创建报表、汇总数据或与其他数据源集成时非常有用。
使用PIVOT运算符
将竖向数据转换为横向的常用 是使用PIVOT运算符。PIVOT运算符将一列值(通常为类别或日期)作为行,将另一列值(通常为数值或字符串)作为列。语法如下:
sql
SELECT *
FROM (
SELECT category, value
FROM table_name
) AS subquery
PIVOT (
SUM(value)
FOR category IN ([category1], [category2], ...)
) AS pivot_table;
使用UNPIVOT运算符
另一种将竖向数据转换为横向的 是使用UNPIVOT运算符。UNPIVOT运算符将多列数据转换为两列:一列为列名,另一列为值。语法如下:
sql
SELECT *
FROM table_name
UNPIVOT (
value
FOR category IN ([category1], [category2], ...)
) AS unpivot_table;
代码示例
下面是一个使用PIVOT运算符将竖向销售数据转换为横向销售数据的示例:
sql
SELECT *
FROM (
SELECT product, year, sales
FROM sales_table
) AS subquery
PIVOT (
SUM(sales)
FOR year IN ([2021], [2022])
) AS pivot_table;
其他提示
使用PIVOT和UNPIVOT运算符时,需要考虑以下事项:
* 确保要转换的列具有正确的类型(PIVOT为字符串或日期,UNPIVOT为数值或字符串)。
* 对于PIVOT,需要指定要转换的列以及将用作行的列。
* 对于UNPIVOT,需要指定要转换的列以及将用作值的列。