T-SQL 行列相互轉換命令:PIVOT 和 UNPIVOT 使用詳解
在數據庫管理中,行列轉換是一個常見的需求,特別是在報告和數據分析中。T-SQL 提供了兩個強大的命令來實現這一功能:PIVOT 和 UNPIVOT。本文將詳細介紹這兩個命令的使用方法及其應用場景。
PIVOT 命令
PIVOT 命令用於將行數據轉換為列數據,這在需要將數據以更易於理解的格式呈現時非常有用。例如,假設我們有一個銷售數據表,記錄了不同產品在不同月份的銷售額。我們希望將這些數據轉換為每個產品的銷售額列出來。
基本語法
SELECT , [列1], [列2], ...
FROM
(
SELECT , ,
FROM
) AS SourceTable
PIVOT
(
()
FOR IN ([列1], [列2], ...)
) AS PivotTable;
範例
假設我們有一個名為 Sales 的表,結構如下:
Product | Month | Amount
--------|-------|-------
A | Jan | 100
A | Feb | 150
B | Jan | 200
B | Feb | 250
我們希望將這些數據轉換為每個產品的每月銷售額,使用 PIVOT 命令如下:
SELECT Product, [Jan], [Feb]
FROM
(
SELECT Product, Month, Amount
FROM Sales
) AS SourceTable
PIVOT
(
SUM(Amount)
FOR Month IN ([Jan], [Feb])
) AS PivotTable;
執行上述查詢後,結果將顯示每個產品在一月和二月的銷售額:
Product | Jan | Feb
--------|-----|-----
A | 100 | 150
B | 200 | 250
UNPIVOT 命令
UNPIVOT 命令則是將列數據轉換為行數據,這在需要將數據以更詳細的方式進行分析時非常有用。例如,將每個產品的每月銷售額轉換回原始的行格式。
基本語法
SELECT , ,
FROM
(
SELECT , [列1], [列2], ...
FROM
) AS PivotTable
UNPIVOT
(
FOR IN ([列1], [列2], ...)
) AS SourceTable;
範例
基於之前的 PIVOT 結果,我們可以使用 UNPIVOT 將數據轉換回原始格式:
SELECT Product, Month, Amount
FROM
(
SELECT Product, [Jan], [Feb]
FROM SalesPivot
) AS PivotTable
UNPIVOT
(
Amount FOR Month IN ([Jan], [Feb])
) AS SourceTable;
執行上述查詢後,結果將顯示原始的銷售數據:
Product | Month | Amount
--------|-------|-------
A | Jan | 100
A | Feb | 150
B | Jan | 200
B | Feb | 250
總結
PIVOT 和 UNPIVOT 是 T-SQL 中非常有用的命令,能夠幫助用戶在數據分析和報告中更靈活地處理數據。通過這些命令,用戶可以輕鬆地將數據轉換為所需的格式,從而提高數據的可讀性和可用性。
如果您正在尋找高效的 VPS 解決方案來支持您的數據庫需求,Server.HK 提供多種選擇,適合各種業務需求。無論是 香港伺服器 還是 云伺服器,我們都能為您提供穩定的服務。