有時候需要旋轉結果以便在水平方向顯示列,而在垂直方向顯示行。這就是所謂的創建 PivotTable®、創建交叉數據報表或旋轉數據。
假定有一個表 Pivot,其中每季度佔一行。對 Pivot 的 SELECT 操作在垂直方向上列出這些季度:
Year Quarter Amount
---- ------- ------
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4
生成報表的表必須是這樣的,其中每年佔一行,每個季度的數值顯示在一個單獨的列中,如:
Year
Q1
Q2
Q3
Q4
1990
1.1
1.2
1.3
1.4
1991
2.1
2.2
2.3
2.4
下面的語句用於創建 Pivot 表並在其中填入第一個表中的數據:
USE Northwind
GO
CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO
下面是用於創建旋轉結果的 SELECT 語句:
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO
該 SELECT 語句還處理其中每個季度佔多行的表。GROUP BY 語句將 Pivot 中一年的所有行合併成一行輸出。當執行分組操作時,SUM 聚合中的 CASE 函數的應用方式是這樣的:將每季度的 Amount 值添加到結果集的適當列中,在其它季度的結果集列中添加 0。
如果該 SELECT 語句的結果用作電子表格的輸入,那麼電子表格將很容易計算每年的合計。當從應用程序使用 SELECT 時,可能更易於增強 SELECT 語句來計算每年的合計。例如:
SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal
FROM (SELECT Year,
SUM(CASE P.Quarter WHEN 1 THEN P.Amount ELSE 0 END) AS Q1,
SUM(CASE P.Quarter WHEN 2 THEN P.Amount ELSE 0 END) AS Q2,
SUM(CASE P.Quarter WHEN 3 THEN P.Amount ELSE 0 END) AS Q3,
SUM(CASE P.Quarter WHEN 4 THEN P.Amount ELSE 0 END) AS Q4
FROM Pivot AS P
GROUP BY P.Year) AS P1
GO
帶有 CUBE 的 GROUP BY 和帶有 ROLLUP 的 GROUP BY 都計算與本例顯示相同的信息種類,但格式稍有不同。
交叉數據報表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.