Zusammenfassen von Daten mit ROLLUP
Der ROLLUP-Operator eignet sich zum Generieren von Berichten, die Teilergebnisse und Gesamtwerte enthalten. Der ROLLUP-Operator generiert ein Resultset, das mit den vom CUBE-Operator generierten Resultsets vergleichbar ist. Weitere Informationen finden Sie unter Zusammenfassen von Daten mit CUBE.
CUBE und ROLLUP unterscheiden sich wie folgt:
- CUBE generiert ein Resultset, das die Aggregate für alle Kombinationen aus Werten in den ausgewählten Spalten anzeigt.
- ROLLUP generiert ein Resultset, das die Aggregate für eine Hierarchie von Werten in den ausgewählten Spalten anzeigt.
So enthält eine einfache Inventory-Tabelle z. B. Folgendes:
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
Die folgende Abfrage generiert einen Teilergebnisbericht:
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
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00
(7 row(s) affected)
Wird das ROLLUP
-Schlüsselwort in der Abfrage in CUBE
geändert, ist das Resultset von CUBE
identisch, mit der Ausnahme, dass am Ende die folgenden zwei zusätzlichen Zeilen zurückgegeben werden:
ALL Blue 225.00
ALL Red 433.00
Die CUBE
-Operation hat Zeilen für mögliche Kombinationen aus Werten sowohl von Item
als auch von Color
generiert. So berichtet CUBE
z. B. nicht nur alle möglichen Kombinationen aus Color
-Werten in Verbindung mit dem Item
-Wert Chair
(Red
, Blue
und Red
+ Blue
), sondern auch alle möglichen Kombinationen aus Item
-Werten in Verbindung mit dem Color
-Wert Red
(Chair
, Table
und Chair
+ Table
).
Die ROLLUP
-Operation berichtet nicht alle möglichen Kombinationen aus Werten in der Spalte (den Spalten) links in der GROUP BY
-Klausel für jeden Wert in den Spalten rechts. So berichtet ROLLUP
z. B. nicht alle möglichen Kombinationen aus Item
-Werten für jeden Color
-Wert.
Das Resultset einer ROLLUP-Operation verfügt über einen vergleichbaren Funktionsumfang wie das Resultset, das von einer COMPUTE BY-Operation zurückgegeben wird. ROLLUP weist jedoch die folgenden Vorteile auf:
- ROLLUP gibt ein einzelnes Resultset zurück, während COMPUTE BY mehrere Resultsets zurückgibt, was die Komplexität von Anwendungscode erhöht.
- ROLLUP kann in einem Servercursor verwendet werden, COMPUTE BY hingegen nicht.
- Teilweise kann der Abfrageoptimierer effizientere Ausführungspläne für ROLLUP als für COMPUTE BY generieren.
Siehe auch
Konzepte
Zusammenfassen von Daten mit COMPUTE und COMPUTE BY