Als Alternative zu den hierarchischen Gruppierungsmustern der ROLLUP-Klausel können Sie auch einen Datenwürfel erstellen. Dies ist eine n-dimensionale Zusammenfassung der Eingabedaten, wobei durch die CUBE-Klausel jede mögliche Kombination von GROUP BY-Ausdrücken verwendet wird. Das Ergebnis der CUBE-Klausel ist eine Produktmenge aller möglichen Kombinationen von Elementen aus jeder Wertegruppe. Dies kann bei komplexen Datenanalysen sehr hilfreich sein.
Wenn n GROUPING-Ausdrücke im Format (X1,X2, . . .,Xn) in einer CUBE-Klausel enthalten sind. generiert CUBE 2n Gruppierungskombinationen wie folgt:
{(), (X1), (X1,X2), (X1,X2,X3), ... , (X1,X2,X3, ...,Xn), (X2), (X2,X3), (X2,X3,X4), ... , (X2,X3,X4, ... , Xn), ... , (Xn)}. |
Die folgende Abfrage fasst die Bestellungen nach Jahr und Quartal zusammen sowie nach Quartalen innerhalb eines Jahres, 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 CUBE ( Year, Quarter ) ORDER BY Year, Quarter; |
Diese Abfrage liefert folgende Ergebnisse:
Quarter | Year | Orders | GQ | GY | |
---|---|---|---|---|---|
1 | (NULL) | (NULL) | 648 | 1 | 1 |
2 | 1 | (NULL) | 226 | 0 | 1 |
3 | 2 | (NULL) | 196 | 0 | 1 |
4 | 3 | (NULL) | 101 | 0 | 1 |
5 | 4 | (NULL) | 125 | 0 | 1 |
6 | (NULL) | 2000 | 380 | 1 | 0 |
7 | 1 | 2000 | 87 | 0 | 0 |
8 | 2 | 2000 | 77 | 0 | 0 |
9 | 3 | 2000 | 91 | 0 | 0 |
10 | 4 | 2000 | 125 | 0 | 0 |
11 | (NULL) | 2001 | 268 | 1 | 0 |
12 | 1 | 2001 | 139 | 0 | 0 |
13 | 2 | 2001 | 119 | 0 | 0 |
14 | 3 | 2000 | 10 | 0 | 0 |
Die erste Zeile in der Ergebnismenge zeigt die Gesamtsumme (648) aller Bestellungen für alle Quartale der Jahre 2000 und 2001.
In den Zeilen 2 – 5 werden die Bestellungen für jedes Jahr nach Quartalen zusammengefasst.
In den Zeilen 6 und 11 werden die gesamten Bestellungen für 2000 und 2001 gezeigt.
In den Zeilen 7 – 10 und 12 – 14 werden die Quartalssummen der Jahre 2000 und 2001 aufgeführt.
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 6 und 11 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 des Jahres enthält.
Die durch CUBE generierte Ergebnismenge kann sehr groß sein, da CUBE eine exponentielle Anzahl von Gruppierungskombinationen bildet. Aus diesem Grund erlaubt SQL Anywhere keine GROUP BY-Klauseln mit über 64 GROUP BY-Ausdrücken. Wenn eine Anweisung diese Grenze überschreitet, schlägt sie fehl und gibt SQLCODE -944 (SQLSTATE 42WA1) zurück.
Weitere Informationen zur Syntax der CUBE-Klausel finden Sie unter GROUP BY-Klausel.
Sie können auch die Transact-SQL-kompatible Syntax WITH CUBE benutzen, um die gleichen Ergebnisse zu erzielen wie mit GROUP BY CUBE. 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 CUBE:
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 CUBE 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 |