doppelte Zeilen aus ITAB eliminieren

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

doppelte Zeilen aus ITAB eliminieren

Beitrag von mörtel (ForumUser / 20 / 0 / 0 ) »
Hallo zusammen,
ich suche eine elegante Lösung um doppelte Einräge aus einer ITAB zu löschen.

Sieht wie folgt aus.

Select auf dbtab in itab mit bestimmten Kriterien.
Itab ist gefüllt.
Nun kann die Itab mehrere Einträge der gleiche Belegnummer haben, wobwi auch die 3 weiteren Keyfelder identisch sind. Keyfeld 5 ist different.

Jetzt sollen alle Einträge der Itab, die die den identischen Schlüssel der ersten vier Keyfelder haben rausfliegen.

Jetzt mein Problem: wie finde ich heraus das es mehrere Einträge zu einem best. Schlüssel in der itab gibt? Und wie eliminiere ich diese aus der itab?

Danke

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von littleJohn (ForumUser / 70 / 13 / 0 ) »
... schau doch mal in der SAP-Hilfe unter

DELETE ADJACENT DUPLICATES FROM itab.

nach!

Gruß
littleJohn

Beitrag von mörtel (ForumUser / 20 / 0 / 0 ) »
Hallo,
den kenne ich auch. Löscht aber nur die doppelten heraus und lässt einen stehen.
Ich muß aber alle Einträge löschen, die mehrfach vorkommen.

Danke

Beitrag von littleJohn (ForumUser / 70 / 13 / 0 ) »
Wenn aber die itab am Anfang nach den Schlüsselfeldern sortiert wird und danach das oben genannte Statement angewendet wird, werden doch alle Mehrfacheinträge gelöscht.
Oder verstehe ich das Problem falsch?

Beitrag von littleJohn (ForumUser / 70 / 13 / 0 ) »
... mit dem Zusatz

COMPARING field1 ... field4

natürlich!

Beitrag von mörtel (ForumUser / 20 / 0 / 0 ) »
Ich muß nicht nur die doppelten Einträge löschen, sondern es sollen nur die Einträge in der itab bleiben die ursprünglich singulär vorkommen.

Belnr 1 a b c d
belnr 1 a b c d
belnr 1 a b c d
belnr 2 a b c d


zum Beispiel so, und alle Einträge belnr 1 sollen gelöscht werden, nicht nur die doppelten.
Nach DELETE ADJACENT DUPLICATES FROM itab. sieht die itab doch so aus

Belnr 1 a b c d
belnr 2 a b c d

es soll aber nur noch Eintrag
belnr 2 a b c d

in der itab stehen.

Beitrag von mörtel (ForumUser / 20 / 0 / 0 ) »
mit comparing fields lege ich nur die Vergleichsfelder fest, aber nicht was damit gemacht werden soll.

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
mörtel hat geschrieben:mit comparing fields lege ich nur die Vergleichsfelder fest, aber nicht was damit gemacht werden soll.
Was meinst du damit "was damit gemacht werden soll"? comparing ist schon richtig. Damit löst du dein Problem.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von mörtel (ForumUser / 20 / 0 / 0 ) »
SAP HELP

Syntax
... ADJACENT DUPLICATES FROM itab
[COMPARING { comp1 comp2 ...}|{ALL FIELDS}]... .


Zusatz:
... COMPARING {comp1 comp2 ...}|{ALL FIELDS}


Wirkung
Mit diesen Zusätzen löscht die Anweisung DELETE in Gruppen aufeinander folgender Zeilen, die in bestimmten Komponenten den gleichen Inhalt haben, alle Zeilen bis auf die erste Zeile der Gruppe.


ich will aber das auch der erste Eintrag der Gruppierung gelöscht wird.

Beitrag von Krueger ( / / 0 / 3 ) »
Selbst ist der Mann .....


Sort Itab by 5 Keyfelder.

Lese (1.) Satz. (index merken, als letzten "gelesenen" Satz)
Vergleiche mit nächstem Satz (index +1).
Sind die ersten 4 keyfelder identisch: lösche alle Sätze deren 4 Keyfelder übereinstimmen. Lese index(letzten gelesen Satz wieder, da dieser der nächste ist)

....nächster Satz, gleiches Prozedre...

Beitrag von Krueger ( / / 0 / 3 ) »
Doppelpost :evil:

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
mörtel hat geschrieben:ich will aber das auch der erste Eintrag der Gruppierung gelöscht wird.
Du wirst da nicht um ein LOOP über die itab herum kommen. Ich würde das in etwa so lösen

Code: Alles auswählen.

* Tabelle nach Key sortieren
SORT itab BY key1 key2 key3 key4.

* Mehrfacheinträge löschen
LOOP AT itab INTO wa.
* zähler initialisieren
  AT NEW key4.
    CLEAR g_count
  ENDAT.

* Zählen
 g_count = g_count + 1.
 
* Wenn Mehrfacheinträge dann löschen
 AT END OF key4.
    IF g_count > 1.
      DELETE itab WHERE key1 = wa-key1
                       AND  key2 = wa-key2
                       AND  key3 = wa-key3
                       AND  key4 = wa-key4.
    ENDIF.
 ENDAT.
ENDLOOP.
Nachteil ist, dass du einmal über die ganze itab loopen musst, deshalb die Frage: Kannst du nicht schon das Einlesen von Mehrfachereinträge verhindern?

Ohne deinen Select zu kennen, hier ein Beispiel mit SUBQUERY:

Code: Alles auswählen.

SELECT *
FROM dbtab
INTO TABLE itab
WHERE eins IN s_eins
   AND zwei IN s_zwei
  AND NOT EXISTS ( SELECT *
                  FROM dbtab
                  WHERE key1 = dbtab~key1
                  AND   key2 = dbtab~key2
                  AND   key3 = dbtab~key3
                  AND   key4 = dbtab~key4
                  AND   key5 <> dbtab~key5 )
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

2
Antw.
607
Views
Löschen von itab-Zeilen
von Patrick1982 » 08.07.2021 12:30 • Verfasst in ABAP® für Anfänger
1
Antw.
7956
Views
Überflüssige Nachkommastellen eliminieren
von Newbee » 05.02.2007 22:28 • Verfasst in ABAP® für Anfänger
30
Antw.
14129
Views
move itab 1 nach itab 2 mit bedingung
von c oco » 17.04.2012 14:39 • Verfasst in ABAP® für Anfänger
5
Antw.
5876
Views
doppelte einträge
von zwiback » 28.10.2005 08:52 • Verfasst in ABAP® für Anfänger
6
Antw.
2385
Views
doppelte Spalteneintr�ge
von hampa » 21.03.2006 12:35 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 767
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2389
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8974