SQL Server 中将行转换为列的SQL查询
介绍
PIVOT 运算符用于将表的行旋转为列。它对于生成交叉表报表很有用,在交叉表报表中,结果以汇总形式呈现。PIVOT 运算符在 SQL Server 2005 及更高版本中可用。
PIVOT 运算符用于在 SQL Server 数据库 中将行转换为列。它通常用于生成交叉表报表,在交叉表报表中,结果以汇总形式呈现。
定义
在 SQL Server 中,PIVOT 运算符允许您将行转换为列。它对于生成交叉表报表很有用,在交叉表报表中,结果以汇总形式呈现。
要使用 PIVOT 运算符,您需要指定以下内容:
源表,其中包含要转换为列的行。
枢轴列,其中包含要作为新列名使用的值。
聚合列,其中包含要作为列值使用的值。
枢轴子句,指定如何将行转换为列。
语法
以下是使用 PIVOT 运算符的一般语法:
SELECT * FROM ( SELECT column_list FROM table_name ) AS sourceTable PIVOT ( aggregated_function(aggregated_column) FOR pivot_column IN (column_list) ) AS pivotTable;
在此语法中:
column_list 是您想要包含在结果表中的列的列表。
table_name 是源表的名称。
aggregated_function 是一个函数,例如 SUM、AVG、MIN、MAX 等,用于计算聚合列的汇总值。
aggregated_column 是您想要在结果表中汇总的列。
pivot_column 是包含要作为新列名使用的值的列。
column_list 是您想要作为新列名使用的枢轴列中的值列表。
示例 1
以下是如何使用 PIVOT 运算符的示例:
SQL 查询
SELECT * FROM ( SELECT CustomerId, Year, Sales FROM CustomerSales ) AS sourceTable PIVOT ( SUM(Sales) FOR Year IN ([2010], [2011], [2012]) ) AS pivotTable;
在此示例中,`CustomerSales` 表有三列:`CustomerId`、`Year` 和 `Sales`。`PIVOT` 运算符将获取此表的行并将其转换为列。结果表将为 `IN` 子句中列出的每个年份(在本例中为 2010 年、2011 年和 2012 年)包含一列,而这些列中的值将是每位客户在每年的总销售额。
示例 2
以下是如何使用 PIVOT 运算符的示例:
SQL 查询
SELECT * FROM ( SELECT EmployeeId, Month, Sales FROM EmployeeSales ) AS sourceTable PIVOT ( AVG(Sales) FOR Month IN ([January], [February], [March]) ) AS pivotTable;
此示例将获取 `EmployeeSales` 表的行并将其转换为列。结果表将为 `IN` 子句中列出的每个月份(在本例中为一月、二月和三月)包含一列,而这些列中的值将是每位员工在每个月的平均销售额。
SQL Server 中将行转换为列的SQL查询的重要点
以下是使用 PIVOT 运算符在 SQL Server 中将行转换为列时需要记住的一些要点:
源表必须至少包含两列:枢轴列和聚合列。
枢轴列必须包含唯一值。
聚合列必须是数值数据类型。
枢轴子句必须指定要作为新列名使用的枢轴列中的值。
枢轴运算符必须与聚合函数(如 SUM、AVG、MIN 或 MAX)一起使用,以计算聚合列的汇总值。
结论
在本文中,我们学习了如何在 SQL Server 中将行转换为列。您还可以使用 UNPIVOT 运算符执行反向操作,即,将列转换为行。