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

 

CUBE verwenden

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)}.
Beispiel

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.

Hinweis

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.

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

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;