Schlüsselbefehl Delete Adjacent Duplicates
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Ein extrem eleganter und wertvoller Befehl, um eine Tabelle auf die für den jeweiligen Kontext nötigen Datensätze zu verdichten ist DELETE ADJACENT DUPLICATES.
Verwendung Befehl DELETE ADJACENT DUPLICATES
- Hier werden aus einer internen Tabelle jeweils die Datensätze gelöscht, die unter "COMPARING" die gleiche Bedingung erfüllen. Der erste Satz unter diesen gleichen Datensätzen bleibt erhalten.
- Daher ist es stets wichtig vor der Verdichtung die Tabelle nach den "Comparing"-Feldern zu sortieren und dies mit aufsteigend/absteigend (ascending/descending) in die Reihenfolge zu bringen, die nach der Verdichtung die gewünschten Datensätze übrig lässt. Ansonsten kommt es zu unsinnigen Ergebnissen.
sort itab by feld1 feld2. delete adjacent duplicates from itab comparing feld1 feld2.
- Wenn alle Felder einer Internen Tabelle bezüglich mehrerer Datensätze den gleichen Wert haben können, kann der Befehl auch ergänzt werden, um den Zusatz "comparing all fields".
delete adjacent duplicates from itab comparing all fields.
Anwendungsfall
Ein einfacher Anwendungsfall wäre, wenn man eine interne Tabelle ITAB hat, wo die Materialnummer ein Feld ist, in der eine Materialnummer mehrfach vorkommen kann. Für jeweils ein Material möchte man eine Datenbankselektion durchführen. Eine Möglichkeit ist nun zu programmieren.
Data: ls_itab type ty_itab, lv_maktx type makt-maktx. * Sortieren und verdichten der Tabelle sort itab by matnr. delete adjacent duplicates from itab comparing matnr. * Selektion der Materialkurzbeschreibung von der Datenbank loop at itab into ls_itab. Select maktx into lv_maktx from makt where matnr = ls_itab-matnr and spras = sy-langu. endloop.
Verdichtung Tabelle mit Addierung Mengenfeld
- Häufig besteht die Anforderung eine Interne Tabelle zu verdichten, aber ein/mehrere Mengenfelder der Gruppe/eines verdichteten Datensatzes zu addieren.
- Hier kann man mit einer Hilfstabelle arbeiten, in denen die unverdichteten Datensätze gespeichert werden und über diese Hilfstabelle erfolgt dann die Summierung des Mengenfeldes mit einer entsprechenden Where-Bedingung zur verdichteten Internen Tabelle.
form verdichtung using pit_itab type tty_itab. Data: lt_itab type tty_itab, lv_zmeng type vbap-zmeng, ls_itab type ty_itab. Field-Symbols: <fs_itab> type ty_itab. * Merken der vollständigen Tabelle lt_itab = pit_itab. * Sortieren und Verdichten nach Gruppierungsmerkmal sort pit_itab by matnr. delete adjacent duplicates form pit_itab comparing matnr. * Äußerer Loop über verdichtete Datensätze und * innerer Loop über Gruppierungsmerkmal zur Addition des Mengenfeldes loop at pit_itab assigning <fs_itab>. clear lv_zmeng. loop at lt_itab into ls_itab where matnr = <fs_itab>-matnr. add ls_itab-zmeng to lv_zmeng. "Addieren Mengenfeld endloop. * Zuweisung addierte Menge zum Mengenfeld der Tabelle des äußeren Loops <fs_itab>-zmeng = lv_zmeng. endloop. endform.