Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » OLAP-Unterstützung » ROLLUP und CUBE als Abkürzung für GROUPING SETS verwenden

 

ROLLUP verwenden

Viele Anwendungen erfordern, dass die Zwischenergebnisse der Gruppierungsattribute der Reihe nach von links nach rechts berechnet werden. Dieses Muster wird als Hierarchie bezeichnet, da das Einfügen zusätzlicher Zwischenergebnisberechnungen zusätzliche Zeilen mit feinerer Granularität der Details erstellt. In SQL Anywhere können Sie eine Hierarchie von Gruppierungsattributen festlegen, indem Sie eine ROLLUP-Klausel mit dem Schlüsselwort ROLLUP erstellen.

Eine Abfrage mit einer ROLLUP-Klausel erstellt eine hierarchische Reihe von Gruppierungskombinationen wie nachfolgend beschrieben. Falls die ROLLUP-Klausel n GROUP BY-Ausdrücke im Format (X1,X2, . . . , Xn) enthält, generiert die ROLLUP-Klausel n + 1 Gruppierungskombinationen wie folgt:

{(), (X1), (X1,X2), (X1,X2,X3), ... , (X1,X2,X3, ... , Xn)}
Beispiel

Die folgende Abfrage fasst die Bestellungen nach Jahr und Quartal zusammen und liefert die Ergebnismenge, die in der unten stehenden Tabelle gezeigt wird:

SELECT QUARTER( OrderDate ) AS Quarter,
       YEAR( OrderDate ) AS Year,
       COUNT( * ) AS Orders,
       GROUPING( Quarter ) AS GQ,
       GROUPING( Year ) AS GY
FROM SalesOrders
GROUP BY ROLLUP( Year, Quarter )
ORDER BY Year, Quarter;

Diese Abfrage liefert folgende Ergebnisse:

Quarter Year Orders GQ GY
1 (NULL) (NULL) 648 1 1
2 (NULL) 2000 380 1 0
3 1 2000 87 0 0
4 2 2000 77 0 0
5 3 2000 91 0 0
6 4 2000 125 0 0
7 (NULL) 2001 268 1 0
8 1 2001 139 0 0
9 2 2001 119 0 0
10 3 2001 10 0 0

Die erste Zeile in einer Ergebnismenge zeigt die Gesamtsumme (648) aller Bestellungen für alle Quartale in beiden Jahren.

Zeile 2 zeigt die gesamten Bestellungen (380) für 2000, während die Zeilen 3 – 6 die Zwischensummen für die Quartale dieses Jahres enthalten. Entsprechend zeigt Zeile 7 die gesamten Bestellungen (268) für 2001, während die Zeilen 8 – 10 die Zwischensummen für die Quartale dieses Jahres enthalten.

Beachten Sie, dass die von der GROUPING-Funktion gelieferten Werte benutzt werden können, um die Zwischensummenzeilen von der Zeile zu unterscheiden, die das Gesamtergebnis enthält. Für die Zeilen 2 und 7 wird durch NULL in der Spalte "Quarter" und den Wert 1 in der Spalte "GQ" (Zwischensumme je Quartal) angezeigt, dass die Zeile die Summe aller Bestellungen aller Quartale (pro Jahr) enthält.

Entsprechend wird in Zeile 1 durch NULL in den Spalten "Quarter" und "Year" sowie den Wert 1 in den Spalten "GQ" und "GY" angezeigt, dass die Zeile die Summe aller Bestellungen aller Quartale und aller Jahre enthält.

Weitere Informationen zur Syntax der ROLLUP-Klausel finden Sie unter GROUP BY-Klausel.

Unterstützung für T-SQL-Syntax WITH ROLLUP

Sie können auch die Transact-SQL-kompatible Syntax WITH ROLLUP benutzen, um die gleichen Ergebnisse zu erzielen wie mit GROUP BY ROLLUP. Die Syntax ist jedoch leicht unterschiedlich und Sie können in der Syntax nur eine einfache GROUP BY-Ausdrucksliste angeben.

Die folgende Abfrage liefert das gleiche Ergebnis wie im vorherigen Beispiel zu GROUP BY ROLLUP:

SELECT QUARTER( OrderDate ) AS Quarter,
       YEAR( OrderDate ) AS Year,
       COUNT( * ) AS Orders,
       GROUPING( Quarter ) AS GQ,
       GROUPING( Year ) AS GY
FROM SalesOrders
GROUP BY Year, Quarter WITH ROLLUP
ORDER BY Year, Quarter;