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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告