数据库 · 6 11 月, 2024

T-SQL 行列相互轉換命令:PIVOT 和 UNPIVOT 使用詳解

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 提供多種選擇,適合各種業務需求。無論是 香港伺服器 還是 云伺服器,我們都能為您提供穩定的服務。