Der Schlüsselbefehl LOOP AT im neuen ABAP mit GROUP BY

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Ab ABAP-Release 7.40 SP8 gibt es den Zusatz GROUP BY bei einer Schleife über einer internen Tabelle.

==Vergleich zum alten Befehl "AT NEW / AT LAST .. ENDAT" Der Befehl "AT NEW <felder> .. ENDAT", bzw. "AT LAST <felder> .. ENDAT" kann in der in der Praxis nur selten passend eingesetzt werden. Voraussetzungen

  1. Nach den abgefragten Felder muss die interne Tabelle sortiert sein.
  2. Die abgefragten Felder müssen die ersten Felder der internen Tabelle sein.

Diese Voraussetzungen sind meist nur dann erfüllt, wenn man relativ mühsam Daten aus einer internen Tabelle in eine passende Tabelle ummappt und umsortiert.

Codingbeispiel

Hier werden zunächst alle Flugverbindungen aus der Tabelle SFLIGHT ausgelesen.

Die interne Tabelle wird dann nach der Kombination von Flugzeugtyp PLANETYPE und Anzahl Sitze SEATSMAX gruppiert, bzw. verdichtet.

Das Ergebnis wird dann in einer WRITE-Liste und einer internen Tabelle LT_GRPDATEN ausgegeben.

 DATA: lt_sflight  TYPE TABLE OF sflight.
 DATA  lt_grpdaten TYPE TABLE OF sflight.

 SELECT *
   FROM sflight
   INTO TABLE lt_sflight.

 LOOP AT lt_sflight ASSIGNING FIELD-SYMBOL(<fs_gruppe>)
   GROUP BY ( key1 = <fs_gruppe>-planetype
              key2 = <fs_gruppe>-seatsmax ).

   WRITE: / <fs_gruppe>-planetype,
            <fs_gruppe>-seatsmax.
   append <fs_gruppe> to lt_grpdaten.
 ENDLOOP.

Die interne Tabelle LT_SFLIGHT muss vorher nicht nach den Felder PLANETYPE und SEATSMAX sortiert sein und sie müssen auch nicht links in der Tabelle stehen.

Literatur