verträgt.wreichelt hat geschrieben:möchte nur Listen wenn zum Ordnungsbegriff X mehr als ein vorkommen vorhanden ist
Code: Alles auswählen.
REPORT.
TYPES: BEGIN OF gts_itab,
x TYPE string,
y TYPE string,
END OF gts_itab,
gtt_itab TYPE STANDARD TABLE OF gts_itab WITH NON-UNIQUE DEFAULT KEY.
DATA: gt_itab TYPE gtt_itab.
gt_itab = VALUE #( ( x = 'a' y = 'z1' )
( x = 'b' y = 'z1' )
( x = 'b' y = 'z2' )
( x = 'c' y = 'x1' )
( x = 'd' y = 'x1' )
( x = 'd' y = 'x2' )
( x = 'f' y = 'z1' )
) .
LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<gs_itab_line>)
GROUP BY ( "key1 = <ls_itab_line>-x
key2 = <gs_itab_line>-y
"anzahl = GROUP SIZE
) ASSIGNING FIELD-SYMBOL(<gs_itab_group>).
LOOP AT GROUP <gs_itab_group> ASSIGNING FIELD-SYMBOL(<gs_group_line>).
IF sy-tabix = 2.
EXIT.
ENDIF.
ENDLOOP.
WRITE:/ to_upper( <gs_group_line>-x ),
<gs_group_line>-y.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
wreichelt
Das Programm funktioniert hier aber nur durch Zufall wie gewünscht, da die Daten entsprechend passen. Sieht man schön, wenn man in die Tabelle noch eine Zeile ( x = 'g' y = 'x1' ) anfügt. Dann wird nicht das zweite Vorkommen von x1 ausgegeben (D x1), sondern G x1.black_adept hat geschrieben: ↑26.08.2021 13:44Interpretation der Ausgabeliste:
Du willst nur eindeutige Y-Werte sehen. Wenn es mehrere davon gibt, möchtest du den 2. x-Eintrag zum y Wert sehen ( sonst stände in der Liste ja F-Z1 und nicht B-Z1 - das hat mich etwas verwirrt bis ich das Muster erkannt hatte ) und wenn es nur einen Eintrag gibt halt diesen ( D X2 ).
[...]
Folgendes Programm kann deine Ausgabeliste halbwegs erzeugen - zumindest den Teil den ich verstanden habe:
[...]
Code: Alles auswählen.
REPORT.
TYPES: BEGIN OF GTS_ITAB,
X TYPE STRING,
Y TYPE STRING,
END OF GTS_ITAB,
GTT_ITAB TYPE SORTED TABLE OF GTS_ITAB WITH NON-UNIQUE DEFAULT KEY.
DATA: GT_ITAB TYPE GTT_ITAB,
LT_DOPPELTE_X TYPE SORTED TABLE OF STRING WITH NON-UNIQUE KEY TABLE_LINE.
GT_ITAB = VALUE #( ( X = 'a' Y = 'z1' )
( X = 'b' Y = 'z1' )
( X = 'b' Y = 'z2' )
( X = 'c' Y = 'x1' )
( X = 'd' Y = 'x1' )
( X = 'd' Y = 'x2' )
( X = 'f' Y = 'z1' ) ).
LOOP AT GT_ITAB ASSIGNING FIELD-SYMBOL(<GS_ITAB_LINE>) FROM 2.
CHECK <GS_ITAB_LINE>-X = GT_ITAB[ SY-TABIX - 1 ]-X.
APPEND <GS_ITAB_LINE>-X TO LT_DOPPELTE_X.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM LT_DOPPELTE_X.
LOOP AT GT_ITAB ASSIGNING <GS_ITAB_LINE>.
CHECK LINE_EXISTS( LT_DOPPELTE_X[ TABLE_LINE = <GS_ITAB_LINE>-X ] ).
WRITE:/ <GS_ITAB_LINE>-X , <GS_ITAB_LINE>-Y.
ENDLOOP.