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)} |
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.
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; |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |