Show TOC

Zeilen gruppierenLocate this document in the navigation structure

DieGROUP-BY -Klausel fasst mehrere Zeilen der Datenbanktabelle zu einer Zeile der Selektion zusammen.

Mit derGROUP-BY -Klausel können solche Zeilen, die in bestimmten Spalten den gleichen Inhalt haben gruppiert werden, wobei über die Zeilen aller übrigen Spalten Aggregatfunktionen berechnet werden. Die Spalten derGROUP-BY -Klausel können statisch und dynamisch angegeben werden.

Statische Spaltenangabe

Um die Spalten derGROUP-BY -Klausel statisch anzugeben, schreibt man:

SELECT lines s 1 [AS a 1 ] s 2 [AS a 2 ]...                agg s m [AS a m ] agg s n [AS a n ]... GROUP BY s 1 s 2 ....

Um dieGROUP-BY -Klausel zu verwenden, müssen in der SELECT -Klausel alle zu lesenden Spalten einzeln angegeben werden. In derGROUP-BY -Klausel werden die Feldbezeichner der Spalten aufgeführt, deren Inhalte verglichen werden soll. Die Spalten können nur mit ihrem Namen aus der Datenbanktabelle benannt werden. Die alternativen Spaltennamen a 1 a 2 … derSELECT -Klausel können nicht verwendet werden.

Alle Spalten derSELECT -Klausel, die bei Verwendung der GROUP-BY -Klausel nicht in dieser aufgeführt sind, müssen in Aggregatausdrücken angegeben werden. Dadurch wird die Vorschrift definiert, wie der Inhalt dieser Spalten in der zusammengefaßten Zeile aus den Inhalten aller Zeilen einer Gruppe berechnet wird.

Dynamische Spaltenangabe

Um die Spalten derGROUP-BY -Klausel dynamisch anzugeben, schreibt man:

... GROUP BY (itab)...

Dabei istitabc eine interne Tabelle mit dem Zeilentyp und einer der maximalen Länge von 72 Zeichen, welche die Spaltennamen s 1 s 2 ...  enthält.

Tipp
REPORT demo_select_group_by.
DATA: carrid TYPE sflight-carrid, 
      minimum TYPE p DECIMALS 2,
      maximum TYPE p DECIMALS 2.
SELECT   carrid MIN( price ) MAX( price )
  INTO     (carrid, minimum, maximum)
  FROM     sflight
  GROUP BY carrid.
  WRITE: / carrid, minimum, maximum.
ENDSELECT.

Die Listenausgabe ist in etwa:

Die Zeilen der Datenbanktabelle SFLIGHT, die in der Spalte CARRID den gleichen Inhalt haben, werden zusammengefasst. Die kleinsten und größten Werte der Spalte PRICE werden für jede dieser Gruppen bestimmt und in die zusammengefasste Zeile gestellt.