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 運算子執行反向操作,即,將列轉換為行。