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

Andere Ressourcen

SELECT (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005