交叉數據報表

有時候需要旋轉結果以便在水平方向顯示列,而在垂直方向顯示行。這就是所謂的創建   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   都計算與本例顯示相同的信息種類,但格式稍有不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章