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 运算符执行反向操作,即,将列转换为行。

更新于:2023年10月22日

30K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告