摘要:[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 的執行計劃來得有效率。