Duplikate in einer internen Tabelle

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Duplikate in einer internen Tabelle

Beitrag von b_c (ForumUser / 6 / 0 / 0 ) »
Hi!
Ich hab' eine interne Tabelle, in der ich Duplikate finden und in eine neue Tabelle schreiben soll.
Die Duplikate sind Einträge, bei denen bestimme Felder gleich sind. Sie kommen anschließend in eine neue Tabelle und werden mit einem "duplicate_key" versehen.

Die Frage ist nun: Wie finde ich Duplikate in einer internen Tabelle ?

Schon mal Dank im Voraus.

MfG
b_c

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


Re: Duplikate in einer internen Tabelle

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »

Code: Alles auswählen.

SORT <ITAB> BY Feld1 Feld2 Feld 3 ...
LOOP AT <itab> INTO <WA>.
  IF <WA>-Feld1 = <WA_OLD>-Feld1
    AND <WA>-Feld2 = <WA_OLD>-Feld2
    AND SO ON.
    APPEND <WA> TO <ITAB_DUPLICATE>.
  ENDIF.
  <WA_OLD> = <WA>.
ENDLOOP.

Re: Duplikate in einer internen Tabelle

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Also am einfachsten wäre IMHO diese Variante:
Table_duplicates[] = Table_original[]
Delete adjacent duplicate from table_orginial comparing feld1 feld2....
und dann die Einträge aus Table_duplicates rausschmeissen, die ebenfalls in Table_original stehen.
Übrigen bleiben die doppelten.
Das sollten natürlich keine Tabellen mit mehreren hunderttausend Einträgen sein...

Re: Duplikate in einer internen Tabelle

Beitrag von b_c (ForumUser / 6 / 0 / 0 ) »
Hoi, danke für die schnellen Antworten.

@Ratazong: Deine Variante werde ich gleich testen.
@ewx: Die Eintragsanzahl grenzt an deinen Wert...

Re: Duplikate in einer internen Tabelle

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Dann probier doch mal beides aus!
Würd mich mal interessieren, welche Variante schneller ist... ;-)
Bei meiner Variante kann es schnell passieren, dass der zugewiesene Hauptspeicher knapp wird, wenn man mal eben so die schon große Datenmenge verdoppelt...

Re: Duplikate in einer internen Tabelle

Beitrag von b_c (ForumUser / 6 / 0 / 0 ) »
oh nein, mir ist gerade noch eingefallen, dass ein überprüfungsfeld n datum ist....
das muss nicht nur gleich sein, sondern kann auch +30 tage noch "gleich" sein.

@ewx: mach ich dann bei gelegenheit ;)

Re: Duplikate in einer internen Tabelle

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
ewx hat geschrieben:Also am einfachsten wäre IMHO diese Variante:
Table_duplicates[] = Table_original[]
Delete adjacent duplicate from table_orginial comparing feld1 feld2....
und dann die Einträge aus Table_duplicates rausschmeissen, die ebenfalls in Table_original stehen.
Übrigen bleiben die doppelten.
Das sollten natürlich keine Tabellen mit mehreren hunderttausend Einträgen sein...
Versteh ich nicht, wie das funktionieren soll. Es stehen ja weiterhin alle Kombinationen in table_original drin.

Re: Duplikate in einer internen Tabelle

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ratazong hat geschrieben:Versteh ich nicht, wie das funktionieren soll. Es stehen ja weiterhin alle Kombinationen in table_original drin.
Nööh!
ewx hat geschrieben:Delete adjacent duplicate from table_orginial comparing feld1 feld2....
Danach sind die doppelten weg...

Re: Duplikate in einer internen Tabelle

Beitrag von b_c (ForumUser / 6 / 0 / 0 ) »
Für die 30 Tage hab ich nun auch ne Lösung, aber bei deinem Vorschlag, ratazong, bekam ich n Kurzdump, da wa_old noch nicht zugewiesen war ;-)

Re: Duplikate in einer internen Tabelle

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
b_c hat geschrieben:Für die 30 Tage hab ich nun auch ne Lösung, aber bei deinem Vorschlag, ratazong, bekam ich n Kurzdump, da wa_old noch nicht zugewiesen war ;-)
Sofort verklagen!!! :)

Re: Duplikate in einer internen Tabelle

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
ewx hat geschrieben:
b_c hat geschrieben:Für die 30 Tage hab ich nun auch ne Lösung, aber bei deinem Vorschlag, ratazong, bekam ich n Kurzdump, da wa_old noch nicht zugewiesen war ;-)
Sofort verklagen!!! :)
Stand da irgendetwas von FIELD-Symbol? ;-)

Re: Duplikate in einer internen Tabelle

Beitrag von b_c (ForumUser / 6 / 0 / 0 ) »
Yep, sry für die Anschluldigung ;-)

Re: Duplikate in einer internen Tabelle

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
ewx hat geschrieben:
Ratazong hat geschrieben:Versteh ich nicht, wie das funktionieren soll. Es stehen ja weiterhin alle Kombinationen in table_original drin.
Nööh!
ewx hat geschrieben:Delete adjacent duplicate from table_orginial comparing feld1 feld2....
Danach sind die doppelten weg...
Ja, und dann? Loopst Du über die duplicate und liest den eintrag in der original. Findest Du immer. Und nun?

Aber bei Datum+30 Tage hat sich das ja eh erledigt. ;-)

Re: Duplikate in einer internen Tabelle

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ratazong hat geschrieben:Ja, und dann? Loopst Du über die duplicate und liest den eintrag in der original. Findest Du immer. Und nun?
Nein, dann liest du über das, was ausser den Duplikaten übrig bleibt.
Wenn du dann aus der Originaltabelle die rauswirfst, die in der bereinigten Tabelle drin sind, bleiben - wie gewünscht - die Duplikate übrig.
Ratazong hat geschrieben:Aber bei Datum+30 Tage hat sich das ja eh erledigt. ;-)
genau... 8)

Re: Duplikate in einer internen Tabelle

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
ewx hat geschrieben:
Ratazong hat geschrieben:Ja, und dann? Loopst Du über die duplicate und liest den eintrag in der original. Findest Du immer. Und nun?
Nein, dann liest du über das, was ausser den Duplikaten übrig bleibt.
Wenn du dann aus der Originaltabelle die rauswirfst, die in der bereinigten Tabelle drin sind, bleiben - wie gewünscht - die Duplikate übrig.
Ratazong hat geschrieben:Aber bei Datum+30 Tage hat sich das ja eh erledigt. ;-)
genau... 8)
Endlich kommt hier mal eine Diskussion zu Stande :D :

Code: Alles auswählen.

DATA: BEGIN OF gs_data,
        werks TYPE werks_d,
        kunnr TYPE kunnr,
      END OF gs_data,
      gt_data like TABLE OF gs_data.

INITIALIZATION.
  gs_data-werks = '0001'. gs_data-kunnr = '0000000815'.
  APPEND gs_data TO gt_data.
  gs_data-kunnr = '0000004711'.
  APPEND gs_data TO gt_data.

START-OF-SELECTION.
* Hier mal bitte Deinen Code einfügen, weil ich peile das immer noch nicht (Relevant zum Vergleich sind alle Felder)

Vergleichbare Themen

4
Antw.
3103
Views
Interne Tabelle Duplikate löschen Zähler Inkrementieren
von SamyB » 19.03.2012 16:52 • Verfasst in ABAP® für Anfänger
3
Antw.
5251
Views
Inhalt einer internen Tabelle in eine transparente Tabelle?
von Gast » 19.10.2004 14:23 • Verfasst in ABAP® Core
2
Antw.
3346
Views
Daten aus internen Tabelle in Tabelle speichern
von Stahle71 » 03.06.2015 11:03 • Verfasst in ABAP® für Anfänger
4
Antw.
4385
Views
DELETE aus internen Tabelle
von meistercoach » 15.04.2015 09:09 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.