Doppelte Spalteneinträge löschen

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

Doppelte Spalteneinträge löschen

Beitrag von Arno (ForumUser / 6 / 0 / 0 ) »
Hallo,

ich stehe vor folgendem Problem:

- in einem Report wird eine interne Tabelle von variabler Länge generiert
- in dieser Tab. gibt es eine Spalte, in der doppelte Einträge vorkommen können
- wenn nun eine Doppelung auftritt, soll immer der zweite (gleiche) Eintrag der Spalte mit seiner ganzen Zeile gelöscht werden

Ich habe es mit DELETE ADJACENT DUPLICATE ENTRIES FROM <itab> [COMPARING... ] versucht. Damit lassen sich jedoch nur doppelte Einträge benachbarter Spalten auffinden und löschen, jedoch nicht innerhalb einer Spalte.

Für ein paar kreative Anregungen bin ich sehr dankbar! ;)

mfg Arno

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


Re: Doppelte Spalteneinträge löschen

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Arno hat geschrieben:Hallo,

ich stehe vor folgendem Problem:

- in einem Report wird eine interne Tabelle von variabler Länge generiert
- in dieser Tab. gibt es eine Spalte, in der doppelte Einträge vorkommen können
- wenn nun eine Doppelung auftritt, soll immer der zweite (gleiche) Eintrag der Spalte mit seiner ganzen Zeile gelöscht werden

Ich habe es mit DELETE ADJACENT DUPLICATE ENTRIES FROM <itab> [COMPARING... ] versucht. Damit lassen sich jedoch nur doppelte Einträge benachbarter Spalten auffinden und löschen, jedoch nicht innerhalb einer Spalte.

Für ein paar kreative Anregungen bin ich sehr dankbar! ;)

mfg Arno
nachdem DELETE ADJACENT nicht hilft, würde es uns helfen, wenn Du ein Beispiel geben würdest. Dann haben wir die Möglichkeit, an Hand der Daten Dein Problem zu verstehen.

Gemäß Deiner Beschreibung, würde ich die Daten in folgender Art vermuten:

Code: Alles auswählen.

victor hugo    prince
leonid tolstoy woina
john   tolkien hobbit
john   tolkien hobbithobbit
:?: sieht ziemlich unverständlich aus... :?:
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beispiel

Beitrag von Arno (ForumUser / 6 / 0 / 0 ) »
Im Anhang befindet sich ein word file mit einer fiktiven Beispieltabelle. In der ersten Spalte treten Doppelungen auf. Diese sollen samt der dazugehörigen Zeile gelöscht werden.

Es muß also innerhalb einer Spalte geprüft werden, ob Doppelungen auftreten.

mfg Arno

Beitrag von Kowi (ForumUser / 28 / 0 / 0 ) »
Ich habe es mit DELETE ADJACENT DUPLICATE ENTRIES FROM <itab> [COMPARING... ] versucht. Damit lassen sich jedoch nur doppelte Einträge benachbarter Spalten auffinden und löschen, jedoch nicht innerhalb einer Spalte.
...und sortieren vor dem DELETE ADJACENT DUPLICATE... soll nicht sein? Ansonsten würde das helfen ;-)

Gruß,
Kowi

sortieren

Beitrag von Arno (ForumUser / 6 / 0 / 0 ) »
Sortieren wäre möglich, aber was sollte es bringen? Das Problem der doppelten Einträger der einen Spalte würde weiterhin bestehen....

Beitrag von Gast ( / / 0 / 3 ) »
Sortiers doch mal und du wirst Augen machen :shock:

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Arno hat geschrieben:Im Anhang befindet sich ein word file mit einer fiktiven Beispieltabelle. In der ersten Spalte treten Doppelungen auf. Diese sollen samt der dazugehörigen Zeile gelöscht werden.

Es muß also innerhalb einer Spalte geprüft werden, ob Doppelungen auftreten.

mfg Arno
möglicherweise kannst Du bereits bei der Selektion (von der Datenbank) mittels Zusatz DISTINCT doppelte Datensätze vermeiden.
Kowi hat geschrieben:
Ich habe es mit DELETE ADJACENT DUPLICATE ENTRIES FROM <itab> [COMPARING... ] versucht. Damit lassen sich jedoch nur doppelte Einträge benachbarter Spalten auffinden und löschen, jedoch nicht innerhalb einer Spalte.
...und sortieren vor dem DELETE ADJACENT DUPLICATE... soll nicht sein? Ansonsten würde das helfen ;-)

Gruß,
Kowi
wenn nicht sortiert werden darf, musst Du mittels LOOP die Tabelle durch gehen und für jeden Satz prüfen, ob Du mit READ TABLE einen Satz findest, dessen SY-TABIX LT akt_tabix ist. Wenn das der Fall ist, kannst Du die aktuelle Zeile löschen:

Code: Alles auswählen.

LOOP AT itab.
lv_tabix = sy-tabix.
READ TABLE itab WITH KEY
                  sp1 = itab-sp1
                TRANSPORTING NO FIELDS.
IF sy-tabix LT lv_tabix.
  DELETE itab INDEX lv_tabix.
ENDIF.
Nachtrag:
DELETE ADJACENT DUPLICATES funktioniert nur, wenn die Tabelle zuvor nach den Spalten sortiert wurde, die verglichen werden sollen :!:

Code: Alles auswählen.

SORT itab BY sp1.
DELETE ADJACENT DUPLICATED FROM itab COMPARING sp1.
adjacent = (engl.) nebeneinander liegend
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
Sort itab. Collect itab. PENG.

Beitrag von Gast ( / / 0 / 3 ) »
Anonymous hat geschrieben: Sort itab... (by)......
Collect itab.
PENG.
Arno hat geschrieben:Hallo,
ich stehe vor folgendem Problem:
- in einem Report wird eine interne Tabelle von variabler Länge generiert
Hier liegt bereits der "Fehler". Bevor ich (doppelte) Einträge in eine interne Tabelle einfüge, prüft man ob dieser schon vorhanden ist.

Warum eine Tabelle unnötig "aufblähen", wenn nachher doch wieder gelöscht wird???

Bei grossen Datenbeständen wo die interne Tabelle vielleicht 1 Mio. Einträge hat, von denen alle doppelte Einträge haben, macht sich das schon sehr bemerktbar.

Grundsätzlich nur die Daten halten und verarbeiten die man auch wirklich braucht und nicht jeden "Müll" bis and Ende mitschleppen um dann auszusortieren.

Re: sortieren

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Arno hat geschrieben:Sortieren wäre möglich, aber was sollte es bringen?
Das wird doch in der F1-Hilfe zu DELETE erklärt.
Warum wendest Du Befehle an, deren Bedeutung Du nicht kennst?

Re: sortieren

Beitrag von Gast ( / / 0 / 3 ) »
Frank Dittrich hat geschrieben:
Arno hat geschrieben:Sortieren wäre möglich, aber was sollte es bringen?
Das wird doch in der F1-Hilfe zu DELETE erklärt.
Warum wendest Du Befehle an, deren Bedeutung Du nicht kennst?
Solche Antworten kannst Du Dir sparen.

ALLE Fragen kannst Du so lapidar beantworten... Schau in die Hilfe, schau in die Documentation, schau bei SAP nach.

Re: sortieren

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Anonymous hat geschrieben:
Frank Dittrich hat geschrieben:
Arno hat geschrieben:Sortieren wäre möglich, aber was sollte es bringen?
Das wird doch in der F1-Hilfe zu DELETE erklärt.
Warum wendest Du Befehle an, deren Bedeutung Du nicht kennst?
Solche Antworten kannst Du Dir sparen.

ALLE Fragen kannst Du so lapidar beantworten... Schau in die Hilfe, schau in die Documentation, schau bei SAP nach.
ob die Formulierung von Frank's Antwort die Beste war, stelle ich mal dahin, aber Deine aggressive (meine Meinung) Anmerkung ist auch nicht wirklich hilfreich.

So, und nun zurück zu Arno und seinem Problem:
Arno, wie ich schon weiter oben geschrieben habe, ist es bei der Verwendung des DELETE ADJACENT notwendig, dass die Tabelle nach den Feldern sortiert worden ist, die mittels DELETE ADJACENT verglichen, und bei mehrfachem Vorkommen, gelöscht werden sollen.

GELÖST!!

Beitrag von Arno (ForumUser / 6 / 0 / 0 ) »
Hallo Gemeinde! :D

Das Problem wurde mit dem Coding:

LOOP AT itab.
lv_tabix = sy-tabix.
READ TABLE itab WITH KEY
sp1 = itab-sp1
TRANSPORTING NO FIELDS.
IF sy-tabix LT lv_tabix.
DELETE itab INDEX lv_tabix.
ENDIF.

gelöst.
Eine Sortierung war nicht möglich, da die Tabelle aus einer Workflow-Umgebung heraus generiert wurde und auch chronologische Zusammenhänge darstellt. Durch eine Sortierung wäre die korrekte Chronologie nicht mehr gegeben gewesen.

Vielen Dank euch allen für die Hilfe!

Beitrag von Gast ( / / 0 / 3 ) »
Die Lösung ist doch ein Scherz :shock:

Erstens wird nur ein Feld verglichen, warum also kein Sort nach diesem Feld und danach evtl. wieder nach den keyfelder?

@ereglam: Wenn Du schon überlegen musst, ob Dittrichs Antwort nicht die Beste war, dann mein Mitleid.

Gut zu beobachten, jede direkte Konfrontation mit Dir oder Dittrich wird SOFORT als aggressive dargestellt. Meistens (fast immer) sogar von einem von Euch beiden, je nachdem.

Habt ihr Angst man rüttel an Eurem "Thron". Was auch ja bereits mehrfach von anderen erwähnt wurde. Die meisten werden dann mundtot gemacht, indem deren Postings gelöscht werden.
Sehr "fair" (ironio off), aber wenn ihr euch nicht anders auseinandersetzen könnt, geht's wohl nur so.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Anonymous hat geschrieben:Die Lösung ist doch ein Scherz :shock:

Erstens wird nur ein Feld verglichen, warum also kein Sort nach diesem Feld und danach evtl. wieder nach den keyfelder?

@ereglam: Wenn Du schon überlegen musst, ob Dittrichs Antwort nicht die Beste war, dann mein Mitleid.

Gut zu beobachten, jede direkte Konfrontation mit Dir oder Dittrich wird SOFORT als aggressive dargestellt. Meistens (fast immer) sogar von einem von Euch beiden, je nachdem.

Habt ihr Angst man rüttel an Eurem "Thron". Was auch ja bereits mehrfach von anderen erwähnt wurde. Die meisten werden dann mundtot gemacht, indem deren Postings gelöscht werden.
Sehr "fair" (ironio off), aber wenn ihr euch nicht anders auseinandersetzen könnt, geht's wohl nur so.
Es soll Datenbestände geben, die sich nicht umsortieren lassen, weil es keine 'Key'-Felder gibt, nach denen später wieder sortiert werden kann.
In sofern kann ich Arno's Problem der Nichtsortierbarkeit durchaus verstehen. Ich hatte nämlich einen tatsächlichen Anwendungsfall, bei dem ich oben gepostete Dublettenprüfung erfolgreich verwendet habe.
Und ob man nach einem oder n Feldern vergleicht, ist der Routine recht egal. Es muss nur richtig beachtet werden.

Wenn Du meinen Vorschlag für einen Witz hälst, bitte. Aber dann liefere auch eine brauchbare Alternative.

PS:
da ich nicht auf irgend einem Thron sitze, kann ich auch keine Angst haben, davon herunter gestoßen zu werden.

PPS:
ich denke mal, dass ich durch meinen Kommentar zu Frank's Antwort sehr wohl klar gemacht habe, dass ich mit Formulierung nicht einverstanden bin.
Inhaltlich ist es jedoch nicht zu beanstanden, dass der Fragende auch mal in die SAP-Hilfe schauen sollte. Man sollte es nur etwas diplomatischer formulieren. ;)

PPPS:
was das Löschen von Postings angeht, kann mir keiner einen Vorwurf machen, da ich über keine Admin-Rechte verfüge und diese auch nicht will.
Ob man überhaupt Postings löschen sollte, ist eine sehr schwierige Frage, wobei ich der Meinung bin, dass Deine durchaus hätten stehen gelassen werden können...
Zuletzt geändert von ereglam am 15.04.2005 18:15, insgesamt 1-mal geändert.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Vergleichbare Themen

2
Antw.
3197
Views
Doppelte Datensätze aus einer Tabelle löschen
von managero » 21.04.2008 17:34 • Verfasst in ABAP® Core
1
Antw.
4484
Views
doppelte Einträge löschen Distinct über mehrere Spalten
von tmxx » 03.03.2008 13:53 • Verfasst in ABAP® für Anfänger
5
Antw.
2605
Views
5
Antw.
5899
Views
doppelte einträge
von zwiback » 28.10.2005 08:52 • Verfasst in ABAP® für Anfänger
6
Antw.
2390
Views
doppelte Spalteneintr�ge
von hampa » 21.03.2006 12:35 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1479
Regex in where
vor 9 Stunden von tar 6 / 144

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.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1479
Regex in where
vor 9 Stunden von tar 6 / 144

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821