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

 

NULL-Platzhalter mithilfe der GROUPING-Funktion löschen

Die von ROLLUP oder CUBE erstellten Summen- und Zwischensummenzeilen enthalten den Platzhalter NULL in den Spalten, die in der SELECT-Liste angegeben wurden, die aber nicht für die Gruppierung benutzt wurden. Daher können Sie, wenn Sie die Ergebnisse prüfen, nicht unterscheiden, ob es sich bei NULL in einer Zwischensummenzeile um den Platzhalter NULL handelt oder ob sich NULL aus der Auswertung der zugrunde liegenden Daten für die Zeile ergeben hat. Daher ist es auch schwierig, zwischen einer Detailzeile, einer Zwischensummenzeile und einer Gesamtsummenzeile zu unterscheiden.

Mithilfe der GROUPING-Funktion können Sie zwischen dem Platzhalter NULL und NULL unterscheiden, die sich aus den zugrunde liegenden Daten ergeben haben. Falls Sie aus der Gruppierungskombinationsspezifikation eine GROUPING-Funktion mit einem Group By-Ausdruck spezifizieren, liefert die Funktion eine 1, wenn es sich um den Platzhalter NULL handelt, und eine 0, wenn es sich um einen Wert (möglicherweise NULL) handelt, der in den zugrunde liegenden Daten für diese Zeile vorhanden ist.

Die folgende Abfrage liefert beispielsweise die Ergebnismenge, die in der unten stehenden Tabelle gezeigt wird:

SELECT Employees.EmployeeID AS Employee,
   YEAR( OrderDate ) AS Year,
   COUNT( SalesOrders.ID ) AS Orders,
   GROUPING( Employee ) AS GE,
   GROUPING( Year ) AS GY
FROM Employees LEFT OUTER JOIN SalesOrders
   ON Employees.EmployeeID = SalesOrders.SalesRepresentative
WHERE Employees.Sex IN ( 'F' )
   AND Employees.State IN ( 'TX' , 'NY' )
GROUP BY GROUPING SETS ( ( Year, Employee ), ( Year ), ( ) )
ORDER BY Year, Employee;

Diese Abfrage liefert folgende Ergebnisse:

Employees Year Orders GE GY
1 (NULL) (NULL) 54 1 1
2 (NULL) (NULL) 0 1 0
3 102 (NULL) 0 0 0
4 390 (NULL) 0 0 0
5 1062 (NULL) 0 0 0
6 1090 (NULL) 0 0 0
7 1507 (NULL) 0 0 0
8 (NULL) 2000 34 1 0
9 667 2000 34 0 0
10 (NULL) 2001 20 1 0
11 667 2001 20 0 0

In diesem Beispiel enthält Zeile 1 die Gesamtsumme der Bestellungen (54), da die leere Gruppierungskombination "()" angegeben wurde. Beachten Sie, dass sowohl "GE" als auch "GY" eine 1 enthalten, womit angezeigt wird, dass es sich bei NULL in den Spalten "Employees" und "Year" um den Platzhalter NULL für die Spalten "Employees" und "Year" handelt.

Zeile 2 ist eine Zwischensummenzeile. Die 1 in der Spalte "GE" zeigt an, dass NULL in der Spalte "Employee" der Platzhalter NULL ist. Die 0 in der Spalte "GY" zeigt an, dass NULL in der Spalte "Year" das Ergebnis der Auswertung der zugrunde liegenden Daten und nicht der Platzhalter NULL ist. In diesem Fall enthält diese Zeile diejenigen Angestellten, die keine Bestellungen haben.

Die Zeilen 3 – 7 zeigen die Gesamtzahl der Bestellungen pro Mitarbeiter, bei denen "Year" den Wert NULL enthält. Dabei handelt es sich um die weiblichen Angestellten, die in Texas und New York leben und die keine Bestellungen haben. Dies sind die Detailzeilen für Zeile 2, d.h., Zeile 2 ist eine Summenzeile der Zeilen 3 – 7.

Zeile 8 ist eine Zwischensummenzeile, welche die Gesamtzahl der Bestellungen aller Angestellten im Jahr 2000 enthält. Zeile 9 ist die einzelne Detailzeile für Zeile 8.

Zeile 10 ist eine Zwischensummenzeile, welche die Gesamtzahl der Bestellungen aller Angestellten im Jahr 2001 enthält. Zeile 11 ist die einzelne Detailzeile für Zeile 10.

Weitere Hinweise zur Syntax der GROUPING-Funktion finden Sie unter GROUPING-Funktion [Aggregat].