Code: Alles auswählen.
Data: gt_itab type table of ty_tab
gs_itab type ty_tab
gt_merk type table of ty_tab
gs_merk type ty_tab
gt_ausgabe type table of ty_tab
gs_ausgabe type ty_tab
lv_anz type i.
Loop at gt_itab into gs_itab
if sy-tabix = 1.
gs_merk = gs_itab.
lv_anz = 1.
else.
if gs_itab-wert = gs_merk-wert
lv_anz = lv_anz + 1.
else.
gs_merk = gs_itab.
gs_ausgabe-wert = gs_merk-wert.
gs_ausgabe-anzahl = lv_anz.
append gs_ausgabe to gt_ausgabe.
endif.
endif.
Code: Alles auswählen.
types:
beginn of ty_count,
wert type string,
count type i,
end of ty_count.
data:
lt_count type hashed table of ty_count with unique key wert,
lr_count type reference of ty_count,
ls_count type ty_count.
sort gt_itab by wert.
LOOP AT gt_itab into gs_itab.
read table lt_count reference into lr_count with table key wert = gs_itab-wert.
if sy-subrc ne 0.
clear ls_count.
ls_count-wert = gs_itab-wert.
insert ls_count into table lt_count reference into lr_count.
endif.
lr_count->count = lr_count->count + 1.
endloop.
Code: Alles auswählen.
types: begin of ty_spras,
spras type spras,
count type i,
end of ty_spras.
types: ty_spras_tab type standard table of ty_spras.
data: ls_ty_spras type ty_spras.
data: lt_ty_spras type ty_spras_tab.
data: ls_006t type t006t.
select * from t006t into ls_006t.
move ls_006t-spras to ls_ty_spras-spras.
move 1 to ls_ty_spras-count.
collect ls_ty_spras into lt_ty_spras.
endselect.
Code: Alles auswählen.
Data: gt_itab type table of ty_tab,
gs_itab type ty_tab,
gs_merk type ty_tab,
gt_ausgabe type table of ty_tab,
gs_ausgabe type ty_tab.
clear gs_merk. " unter der Maßgabe, dass es keine Zeile in gt_itab mit initialem wert gibt
Loop at gt_itab into gs_itab
if gs_itab-wert <> gs_merk-wert.
if sy-tabix > 1.
append gs_ausgabe to gt_ausgabe.
endif.
clear gs_ausgabe.
gs_ausgabe-wert = gs_itab-wert.
endif.
add 1 to gs_ausgabe-anzahl.
endloop.
append gs_ausgabe to gt_ausgabe.
Die "alten" Gruppenstufen funktionieren "von links nach rechts". Das heißt wenn man in der Struktur fünf Felder hat und mit AT das dritte Feld anspricht, werden auch Änderungen in den zwei Feldern links davon als Gruppenstufenwechsel erkannt.L0w-RiDer hat geschrieben:"At end of" würde funktionieren, aber leider habe ich zwei Kriterien und da funktioniert es leider nicht, da das zweite Kriterium dann immer *** bekommt.
Gibt es sowas wie AT END OF auch mit zweit Kriterien??
Schau dir mal den Zusatz GROUP SIZE bei LOOP AT ... GROUP BY an.L0w-RiDer hat geschrieben:hmm wenn ich mit Loop gt_itab into gs_itab Group by wert.
Dann sortiert mir der Loop es automatisch, aber wie könnte ich nun die Gruppeneinträge zählen lassen?
Die Felder "key1", "key2" usw. sind die Namen der Felder in der Struktur die die Gruppenstufe identifizieren. Mit "index" hat man einen Zähler die wievielte Gruppe gerade durchlaufen wird und mit "size" die Anzahl der Elemete in der Gruppe.L0w-RiDer hat geschrieben:LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(keysplus).
So hab ich es nun gefunden.
ich Loope über meine interne Tabelle (spfli_tab ) in eine Struktur (wa) und dann gruppiere ich. Was meinen die hier bei diesem Beispiel mit key1 oder key2?? also die Spalten/Felder nach denen gruppiert werden soll?
Code: Alles auswählen.
LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<ls_itab>)
GROUP BY ( wert_gruppe = <ls_itab>-wert index = group index size = group size ) ASSIGNING FIELD-SYMBOL(<ls_itab_group>).
* Beispiele für die Verwendung
WRITE <ls_itab_group>-wert_gruppe. "Der aktuelle Wert, entspricht gt_itab-wert.
WRITE <ls_itab_group>-index. "Der aktuelle Index der Gruppe
WRITE <ls_itab_group>-size. "Die anzahl der Einträge in der Gruppe
* Die "Anzahl" in das erste Tabellenfeld der ursprünglichen Tabelle schreiben
LOOP AT GROUP <ls_itab_group> ASSIGNING FIELD-SYMBOL(<ls_itab_member>).
<ls_itab_member>-anzahl = <ls_itab_group>-size.
exit.
ENDLOOP.
ENDLOOP.