ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Interne Daten verarbeiten →  Interne Tabellen →  Verarbeitungsanweisungen für interne Tabellen →  LOOP AT itab → 

LOOP AT itab - GROUP BY

Kurzreferenz

Syntax

LOOP AT itab result [ cond] GROUP BY group_key
                           [ASCENDING|DESCENDING [AS TEXT]]
                           [WITHOUT MEMBERS]
                           [group_result].
  ...
  [LOOP AT GROUP ...
    ...
  ENDLOOP.]
  ...
ENDLOOP.


Zusätze:

1. ... ASCENDING|DESCENDING [AS TEXT]

2. ... WITHOUT MEMBERS

Wirkung

Diese Variante der Anweisung LOOP AT itab gruppiert die Zeilen der internen Tabelle und führt eine Schleife über die Gruppen aus. Für die Syntax der Zusätze result und cond gilt das Gleiche wie bei einer Schleife über Zeilen mit der Ausnahme, dass der Zusatz TRANSPORTING NO FIELDS nicht angegeben werden kann.

Mit dem Zusatz GROUP BY erfolgt die Verarbeitung der LOOP-Schleife in zwei Phasen:

Die standardmäßige Reihenfolge der Gruppen in der Gruppenschleife wie auch die Reihenfolge der Mitglieder innerhalb einer Gruppe wird durch die Verarbeitungsreihenfolge der LOOP-Schleife in der ersten Phase definiert:

Die interne Tabelle itab darf in der Gruppenschleife nicht modifiziert werden, es sei denn es ist der Zusatz WITHOUT MEMBERS angegeben.

Systemfelder

Diese Variante der Anweisung LOOP AT mit dem Zusatz GROUP BY setzt den Wert des Systemfeldes sy-tabix in der Gruppenschleife wie folgt:

Nach dem Verlassen der Schleife über ENDLOOP wird sy-tabix auf den Wert gesetzt, den es vor dem Eintritt in die Schleife hatte. Für sy-subrc gilt das Gleiche wie bei einer Schleife über Zeilen.

Hinweise

Beispiel

Das Beispiel zeigt die einfachste Art der Gruppierung nach einer Spalte ohne explizite Angabe des Ausgabeverhaltens der Gruppenschleife. In der Schleife besteht Zugriff auf den Arbeitsbereich wa, insbesondere auf die zum Gruppieren verwendete Komponente wa-carrid. Der Arbeitsbereich wa enthält die erste Zeile jeder Gruppe und repräsentiert die Gruppe in der Schleife. Dies wird als Repräsentantenbindung bezeichnet.

SELECT *
       FROM spfli
       INTO TABLE @DATA(spfli_tab).

LOOP AT spfli_tab INTO DATA(wa)
                  GROUP BY wa-carrid.
  cl_demo_output=>write( wa-carrid ).
ENDLOOP.
cl_demo_output=>display( ).

Ausführbare Beispiele

Gruppierung interner Tabellen

Zusatz 1

... ASCENDING|DESCENDING [AS TEXT]

Wirkung

Diese Zusätze sortieren die Gruppen vor dem Ausführen der Gruppenschleife auf- bzw. absteigend nach dem Gruppenschlüssel. Die Sortierung erfolgt genau so wie wenn eine Anweisung SORT für eine interne Tabelle verwendet wird, deren primärer Tabellenschlüssel der Gruppenschlüssel ist und der Zusatz AS TEXT wirkt entsprechend.

Die Gruppenschleife wird in der Reihenfolge der Sortierung ausgeführt. Ohne die Zusätze ASCENDING bzw. DESCENDING liegen die Gruppen in der Reihenfolge vor, in welcher der Wert eines Gruppenschlüssels zum ersten Mal konstruiert wurde.

Hinweis

Die Sortierung von Gruppen kann als Ergänzung zur Anweisung SORT dienen, wenn die dort möglichen Sortierkriterien nicht ausreichen.

Beispiel

Wie obiges Beispiel aber mit absteigender Sortierung nach dem Gruppenschlüssel.

SELECT *
       FROM spfli
       INTO TABLE @DATA(spfli_tab).

LOOP AT spfli_tab INTO DATA(wa)
                  GROUP BY wa-carrid DESCENDING.
  cl_demo_output=>write( wa-carrid ).
ENDLOOP.
cl_demo_output=>display( ).

Ausführbares Beispiel

Gruppierung mit LOOP und Sortierung.

Zusatz 2

... WITHOUT MEMBERS

Wirkung

Der Zusatz WITHOUT MEMBERS schaltet die standardmäßige interne Ausprägung der Zuordnung jeder Tabellenzeile zu ihrer Gruppe ab. Mit dem Zusatz werden zwar Gruppen gebildet, in der Gruppenschleife besteht aber kein Zugriff auf die Zeilen der Gruppen. Wenn der Zusatz WITHOUT MEMBERS angegeben ist,

Hinweis

Der Zusatz WITHOUT MEMBERS dient der Verbesserung der Performance in allen Fällen, in denen der Inhalt der Gruppen nicht benötigt wird.

Beispiel

Wie obiges Beispiel aber mit dem Zusatz WITHOUT MEMBERS, wofür mit INTO DATA(key) eine Gruppenschlüsselbindung definiert wird. In der Schleife besteht kein Zugriff auf die Zeilen der Gruppen.

SELECT *
       FROM spfli
       INTO TABLE @DATA(spfli_tab).

LOOP AT spfli_tab INTO DATA(wa)
                  GROUP BY wa-carrid WITHOUT MEMBERS
                  INTO DATA(key).
  cl_demo_output=>write( key ).
ENDLOOP.
cl_demo_output=>display( ).



Weiterlesen
LOOP AT itab - group_key
LOOP AT itab - group_result
LOOP AT GROUP
Beispiele zur Gruppierung mit LOOP