Ansicht
Dokumentation

ABAPLOOP_AT_ITAB_GROUP_BY_KEY - LOOP AT ITAB GROUP BY KEY

ABAPLOOP_AT_ITAB_GROUP_BY_KEY - LOOP AT ITAB GROUP BY KEY

BAL_S_LOG - Application Log: Log header data   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

LOOP AT itab, group_key

... key $| ( key1 = dobj1 key2 = dobj2 ...
           $[gs = GROUP SIZE$] $[gi = GROUP INDEX$] ) ...


Zusätze:

1. ... gs = GROUP SIZE

2. ... gi = GROUP INDEX

Wirkung

Gruppenschlüsselausdruck zur Konstruktion des Gruppenschlüssels bei der Gruppierung interner Tabellen. Der Gruppenschlüssel ist das Resultat des Gruppenschlüsselausdrucks, dessen Datentyp wie folgt definiert werden kann:

  • Bei der Angabe von key ist der Gruppenschlüssel ein einzelnes Datenobjekt beliebigen Datentyps.
  • Bei der Angabe von ( key1 = dobj1 key2 = dobj2 ... ) ist der Gruppenschlüssel eine Struktur mit den Komponenten key1, key2, ... . Die Komponenten können beliebige Namen und beliebige Datentypen haben. Der Strukturtyp wird an dieser Stelle als gebundener Datentyp der Struktur definiert.

Bei key bzw. key1, key2, ... handelt es sich um allgemeine Ausdruckspositionen, in der die aktuelle Zeile gemäß des in result definierten Ausgabeverhaltens der Schleife verwendet werden kann. Die Datentypen von key bzw. key1, key2, ... müssen vollständig und statisch erkennbar sein.

Für jede in der Gruppierungsphase gelesene Zeile der internen Tabelle itab wird der Wert des Gruppenschlüssels durch den Gruppenschlüsselausdruck aus den dort angegebenen Datenobjekten, Ausdrücken oder Aufrufen berechnet.

Wenn im Ausgabeverhalten group_result der Gruppenschleife eine Gruppenschlüsselbindung definiert ist, kann über das dort angegebene Datenobjekt bzw. Feldsymbol in der Gruppenschleife auf den Wert des Gruppenschlüssels jeder Gruppe zugegriffen werden.

Hinweise

  • Der berechnete Wert des Gruppenschlüssels für jede gelesene Zeile von itab muss vom passenden Type der gelesen Zeile abhängen, um eine sinnvolle Gruppierung zu erreichen. Randfälle sind:
  • Wenn der Gruppenschlüssel ein von der Zeile unabhängiger Wert ist, gibt es nur eine einzige Gruppe, der alle gelesene Zeilen angehören.

  • Wenn der Gruppenschlüssel für jede gelesene Zeile verschieden ist, gibt es genauso viele Gruppen wie Zeilen und jede Gruppe enthält nur eine Zeile.

Da es sich auf den rechten Seiten aber um allgemeine Ausdruckspositionen handelt, sind beliebige Auswertungen möglich.
  • Durch die Möglichkeit zu direkten Konstruktion einer beliebigen Struktur können bequem mehrkomponentige Gruppenschlüssel erstellt werden, ohne dass zuvor ein passender Strukturtyp deklariert werden muss oder dass die Schlüsselkomponenten beispielsweise in einen String verkettet werden müssen.

Beispiel

Strukturierter Gruppenschlüssel, mit dem nach mehr als nur nach einem Kriterium gruppiert wird. Die Gruppierungskriterien sind hier einfach Spalten der internen Tabelle. Es handelt sich um eine Repräsentantenbindung, bei welcher der Arbeitsbereich wa in der Gruppenschleife für den Zugriff auf den Gruppenschlüssel wiederverwendet wird.

Zusatz 1

... gs = GROUP SIZE

Zusatz 2

... gi = GROUP INDEX

Wirkung

Deklaration zusätzlicher Komponenten zu einem strukturierten Gruppenschlüssel. Diese Komponenten sind nicht Teil des Gruppenschlüssels, sondern dienen der optionalen Ablage gruppenspezifischer Informationen:

  • Die Komponente gs wird für jede Gruppe mit der Anzahl der Gruppenmitglieder versorgt.
  • Die Komponente gi wird für jede Gruppe mit einem Gruppenindex versorgt. Der Gruppenindex des ersten konstruierten Gruppenschlüssels ist 1 und wird für jeden neuen Gruppenschlüssel um 1 erhöht.

Voraussetzung für die Deklaration der zusätzlichen Komponenten ist, dass im Ausgabeverhalten group_result der Gruppenschleife eine Gruppenschlüsselbindung definiert ist. Über das dort angegebene Datenobjekt bzw. Feldsymbol kann in der Gruppenschleife auf die zusätzlichen Komponenten zugegriffen werden.

Die Namen der Komponenten gs und gi sind frei definierbar. Sie erhalten ihre besondere Bedeutung durch die Sprachelemente GROUP SIZE bzw. GROUP INDEX auf der rechten Seite.

Hinweise

  • Solange keine Sortierung der Gruppen mit ASCENDING oder DESCENDING stattfindet, werden die Gruppen in der Gruppenschleife in der Reihenfolge des Gruppenindex verarbeitet. Wenn die Gruppen anders sortiert werden, steht im Gruppenindex die ursprüngliche Position zur Verfügung.
  • Die zusätzlichen Komponenten können insbesondere auch dann ausgewertet werden, wenn es bei Verwendung des Zusatzes WITHOUT MEMBERS keinen Zugriff auf die Gruppenmitglieder gibt.
  • Außer in der Komponente gs mit der rechten Seite GROUP SIZE werden implizit keine weiteren Werte erzeugt, die den Ergebnissen von Aggregatausdrücken bei der Verwendung von GROUP BY in der -Anweisung SELECT entsprechen. Solche Aggregierungen können leicht selbst programmiert werden (siehe Beispiel), wofür die Anwendung von Konstruktoroperatoren wie REDUCE auf die Gruppenmitglieder besonders geeignet sind. Ähnliches gilt für den in möglichen Zusatz HAVING für die Einschränkung der Schleifen von Gruppen, wofür hier z.B. der Filteroperator FILTER verwendet werden kann.

Beispiel

Deklaration eines strukturierten Gruppenschlüssels mit zusätzlichen Komponenten für Gruppenindex und Gruppengröße. Hierfür muss eine Gruppenschlüsselbindung mit INTO data(key) definiert werden.






General Data in Customer Master   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8635 Date: 20240425 Time: 055804     sap01-206 ( 137 ms )