會員登錄 - 用戶注冊 - 網(wǎng)站地圖 Office中國(office-cn.net),專業(yè)Office論壇
當(dāng)前位置:主頁 > 技巧 > Access技巧 > 查詢視圖 > 正文

ADP(SQL SERVER)中的交叉查詢

時間:2004-11-23 18:00 來源:Microsoft 作者:Microsof… 閱讀:

交叉數(shù)據(jù)報表
有時候需要旋轉(zhuǎn)結(jié)果以便在水平方向顯示列,而在垂直方向顯示行。這就是所謂的創(chuàng)建 PivotTable®、創(chuàng)建交叉數(shù)據(jù)報表或旋轉(zhuǎn)數(shù)據(jù)。

假定有一個表 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

生成報表的表必須是這樣的,其中每年占一行,每個季度的數(shù)值顯示在一個單獨的列中,如:

Year
 Q1
 Q2
 Q3
 Q4
 
1990
 1.1
 1.2
 1.3
 1.4
 
1991
 2.1
 2.2
 2.3
 2.4
 


下面的語句用于創(chuàng)建 Pivot 表并在其中填入第一個表中的數(shù)據(jù):

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

下面是用于創(chuàng)建旋轉(zhuǎn)結(jié)果的 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 中一年的所有行合并成一行輸出。當(dāng)執(zhí)行分組操作時,SUM 聚合中的 CASE 函數(shù)的應(yīng)用方式是這樣的:將每季度的 Amount 值添加到結(jié)果集的適當(dāng)列中,在其它季度的結(jié)果集列中添加 0。

如果該 SELECT 語句的結(jié)果用作電子表格的輸入,那么電子表格將很容易計算每年的合計。當(dāng)從應(yīng)用程序使用 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

(責(zé)任編輯:admin)

頂一下
(0)
0%
踩一下
(0)
0%
發(fā)表評論
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
評價: