摘要:[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
關鍵字變更成 CUBE
,CUBE
結果集將保持不變,但最後將傳回兩個額外的資料列:
CUBE
作業將從 Item
與 Color
產生可能值組合的資料列。例如,CUBE
不只會報告 Color
值連同 Item
值 Chair
(Red
、Blue
以及 Red
+ Blue
) 的所有可能組合,它也會報告 Item
值連同 Color
值 Red
(Chair
、Table
以及 Chair
+Table
) 的所有可能組合。
對於 GROUP BY
子句右邊資料行中的每個值,ROLLUP
作業並不會報告左邊資料行 (或多個資料行) 的所有可能值組合。例如,ROLLUP
並不會針對每個 Color
值報告 Item
值的所有可能組合。
ROLLUP 作業之結果集的作用和 COMPUTE BY 傳回的結果集類似。不過,ROLLUP 具有下列優點:
- ROLLUP 將傳回一個結果集,而 COMPUTE BY 則傳回多個結果集,它將增加應用程式碼的複雜度。
- ROLLUP 可用於伺服端資料指標,而 COMPUTE BY 則不能。
- 有時候查詢最佳化工具產生的 ROLLUP 執行計劃會比 COMPUTE BY 的執行計劃來得有效率。