[SQL]ROLLUP|CUBE[轉]

摘要:[SQL]ROLLUP|CUBE[轉]

 

轉載自msdn

 

使用 ROLLUP 來摘要資料

SQL Server 2005
 

ROLLUP 運算子可用來產生包含小計與總數的報告。ROLLUP 運算子將產生一個類似於 CUBE 運算子產生之結果集的結果集。如需詳細資訊,請參閱<使用 CUBE 來摘要資料>。

以下是 CUBE 與 ROLLUP 之間的特定差異:

  • CUBE 將產生一個結果集,顯示出選定資料行之所有值組合的彙總。
  • ROLLUP 將產生一個結果集,顯示出選取的資料行中值階層的彙總。

例如,一個簡單的 Inventory 資料表包含了:

 
Item                 Color                Quantity                   
-------------------- -------------------- -------------------------- 
Table                Blue                 124                        
Table                Red                  223                        
Chair                Blue                 101                        
Chair                Red                  210                        

下列查詢將產生一個小計報告:

 
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
            ELSE ISNULL(Item, 'UNKNOWN')
       END AS Item,
       CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
            ELSE ISNULL(Color, 'UNKNOWN')
       END AS Color,
       SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

    

若查詢中的 ROLLUP 關鍵字變更成 CUBECUBE 結果集將保持不變,但最後將傳回兩個額外的資料列:

 
ALL                  Blue                 225.00                     
ALL                  Red                  433.00                     

CUBE 作業將從 Item 與 Color 產生可能值組合的資料列。例如,CUBE 不只會報告 Color 值連同 Item 值 Chair(RedBlue 以及 Red + Blue) 的所有可能組合,它也會報告 Item 值連同 Color 值 Red (ChairTable 以及 Chair +Table) 的所有可能組合。

對於 GROUP BY 子句右邊資料行中的每個值,ROLLUP 作業並不會報告左邊資料行 (或多個資料行) 的所有可能值組合。例如,ROLLUP 並不會針對每個 Color 值報告 Item 值的所有可能組合。

ROLLUP 作業之結果集的作用和 COMPUTE BY 傳回的結果集類似。不過,ROLLUP 具有下列優點:

  • ROLLUP 將傳回一個結果集,而 COMPUTE BY 則傳回多個結果集,它將增加應用程式碼的複雜度。
  • ROLLUP 可用於伺服端資料指標,而 COMPUTE BY 則不能。
  • 有時候查詢最佳化工具產生的 ROLLUP 執行計劃會比 COMPUTE BY 的執行計劃來得有效率。