数据库 · 1 11 月, 2024

SQL 經典:T-SQL 中的透視和逆透視解析

SQL 經典:T-SQL 中的透視和逆透視解析

在數據庫管理中,SQL(結構化查詢語言)是一個不可或缺的工具。特別是在 Microsoft SQL Server 中,T-SQL(Transact-SQL)提供了許多強大的功能來處理數據。透視(PIVOT)和逆透視(UNPIVOT)是 T-SQL 中兩個重要的操作,能夠幫助用戶以不同的方式查看和分析數據。本文將深入探討這兩個操作的概念、用法及其實際應用。

透視(PIVOT)

透視操作的主要目的是將行數據轉換為列數據,這樣可以更直觀地展示數據。例如,假設我們有一個銷售數據表,記錄了不同產品在不同月份的銷售額。透視操作可以將每個產品的銷售額顯示為列,月份則作為行。

透視的語法


SELECT , , ..., , , ...
FROM 
(
    SELECT 
    FROM 
) AS SourceTable
PIVOT
(
    SUM()
    FOR  IN (, , ...)
) AS PivotTable;

透視的範例

假設我們有以下的銷售數據表:


CREATE TABLE SalesData (
    Product NVARCHAR(50),
    Month NVARCHAR(20),
    Amount INT
);

INSERT INTO SalesData (Product, Month, Amount) VALUES
('Product A', 'January', 100),
('Product A', 'February', 150),
('Product B', 'January', 200),
('Product B', 'February', 250);

我們可以使用透視操作來將這些數據轉換為更易於理解的格式:


SELECT *
FROM 
(
    SELECT Product, Month, Amount
    FROM SalesData
) AS SourceTable
PIVOT
(
    SUM(Amount)
    FOR Month IN ([January], [February])
) AS PivotTable;

執行上述查詢後,我們將得到一個新的表格,其中每個產品的銷售額在不同月份的數據將顯示為列。

逆透視(UNPIVOT)

逆透視操作則是將列數據轉換為行數據,這在需要將寬表轉換為長表時非常有用。例如,當我們需要將透視後的數據再次轉換回原始格式時,可以使用逆透視。

逆透視的語法


SELECT , , 
FROM 
UNPIVOT
(
     FOR  IN (, , ...)
) AS UnpivotTable;

逆透視的範例

基於之前的透視結果,我們可以使用逆透視來將數據轉換回原始格式:


SELECT Product, Month, Amount
FROM 
(
    SELECT Product, [January], [February]
    FROM PivotTable
) AS SourceTable
UNPIVOT
(
    Amount FOR Month IN ([January], [February])
) AS UnpivotTable;

這樣,我們就能夠將透視後的數據恢復為原始的行格式,便於進一步的數據分析。

結論

透視和逆透視是 T-SQL 中非常有用的功能,能夠幫助用戶以不同的方式查看和分析數據。透視操作使得數據的展示更加直觀,而逆透視則提供了靈活性,讓用戶能夠隨時將數據轉換回原始格式。掌握這些操作對於數據分析和報告生成至關重要。

如果您對於數據庫管理和 SQL 有進一步的需求,考慮使用 香港 VPS 服務來搭建您的數據庫環境,享受高效穩定的性能。