Tabelle nur Dublikate

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hallo zusammen,

ich brauche mal eben eine Denkanstoß....

Ich habe eine Tabelle und möchte nur die Dublicate (alle) drin behalten.

Zum Beispiel:

Tabelle: Feld1: Feld2
-----------------------------
TA A 1
TA A 1
TA A 1
TA B 2
TA B 2
TA C 3
TA D 1
TA D 1

Als Ergebnis Möchte ich also haben:


Tabelle: Feld1: Feld2
-----------------------------
TA A 1
TA A 1
TA A 1
TA B 2
TA B 2
TA D 1
TA D 1


Also alles ohne C3, da hiervon kein Dublikat existiert.

Hat mal bitte einer eine Lösung? Ich verzweifel gerade an dem billigen Mist.

Gruß

Euer Kenny

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


Re: Tabelle nur Dublikate

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
Kenny hat geschrieben:Hat mal bitte einer eine Lösung? Ich verzweifel gerade an dem billigen Mist.

Code: Alles auswählen.

SORT itab BY key.

LOOP AT itab INTO wa.
  lv_next = sy-tabix + 1.
  READ TABLE itab INTO wa_next INDEX lv_next.
  IF sy-subrc = 0 AND wa-key <> wa_next-key.
    DELETE TABEL itab FROM wa.
  ENDIF.
ENDLOOP.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Kenny

Gruß Hendrik

Re: Tabelle nur Dublikate

Beitrag von edwin (Specialist / 306 / 12 / 68 ) »
Hi,
naja da fehlt aber noch einiges :

- was ist mit dem letzten Eitnrag - da gibt es keinen Nachfolger, wenn das kein Duplikat ist, bleibt er trotzdem stehen.
- es wird beim Schlüsselwechsel immer der Eintrag gelöscht, bsp A1 A1 B1 -> dann wird auch das letzte A1 gelöscht, da ja B1 dann als Nachfolger kommt.

/Edwin

Folgende Benutzer bedankten sich beim Autor edwin für den Beitrag:
Kenny


Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Cool danke schonmal, aber löscht er so nicht den letzten doppelten einer Reihe mit?

Tabelle: Feld1: Feld2
-----------------------------
TA A 1
TA A 1
TA A 1
TA B 2
TA B 2
TA C 3
TA D 1
TA D 1
Dritter Durchlauf:

wa = A 1
wa_next = B2

=> Er löscht den letzten Eintrag aus A1

Oder nicht?

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
MMhhhh.. und weiter?

Re: Tabelle nur Dublikate

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
hmm so müsste es klappen :

Code: Alles auswählen.

data: anz type i.

sort itab by t1 t2.
loop at itab.

  anz = anz + 1.
  at end of t1.
    at end of t2.
      if anz = 1.
        clear itab.
        modify itab.
      endif.
      clear anz.
    endat.
  endat.

endloop.

Folgende Benutzer bedankten sich beim Autor ratsnus für den Beitrag:
Kenny

<:: XING-Gruppe Tricktresor::>

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Ok, ich habe keine Peilung wie das gerade funktioniert, aber es FUNZT!!!!!

Hammer, Dankeschöön!

Re: Tabelle nur Dublikate

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
hab gerade nochmal drüber nachgedacht, funktioniert nur solang wie deine Daten wirklich so aussehen:

TA A 1
TA A 1
TA A 1
TA B 2
TA B 2
TA C 3
TA D 1
TA D 1

sobald

TA A 1
TA A 1
TA A 2
TA B 2
TA B 2
TA C 3
TA D 1
TA D 1


dann funzt es nicht mehr. dann würde der fett markierte Eintrag bestehen bleiben.
<:: XING-Gruppe Tricktresor::>

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Schitt...

Merke ich auch gerade das irgendwas nicht stimmt.

Und ich muss auch nach 3 Parametern sortieren und suchen...

Hatte jetzt einfach eine Anweisung um:

Code: Alles auswählen.

  SORT e_ta BY sparte geraet EQUNR

LOOP AT e_ta.

  anz = anz + 1.
  AT END OF sparte.
    AT END OF geraet.
      AT END OF EQUNR.
      IF anz = 1.
        CLEAR e_ta.
        MODIFY e_ta.
      ENDIF.
      CLEAR anz.
    ENDAT.
  ENDAT.
ENDAT.
ENDLOOP.

erweitert aber es funzt leider nicht.

Ok noch eine Idee?? Bin ja schon mal beruhigt das auch ihr etwas Zeit dafür braucht :-)

Re: Tabelle nur Dublikate

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
ok noch eine idee. eine zweite Tabelle mit einem String Feld, vielleicht so:

Code: Alles auswählen.

sort itab by t1 t2 t3.
loop at itab.

concatenate itab-t1 itab-t2 itab-t3 into itab2-t1.
append itab2.
endloop.

sort itab2 by t1.
loop at itab2.

  anz = anz + 1.
  at end of t1.

      if anz = 1.
        clear itab2.
        modify itab2.
      endif.
      clear anz.

  endat.

endloop.
danach müsste man die 2te Tabelle wieder auseinander nehmen.

wenn nicht poste mal einen echten Datensatz damit wir sehen was da genau drin steht
<:: XING-Gruppe Tricktresor::>

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Also die Tabelle sieht auszugweise so aus:

Code: Alles auswählen.


SPARTE	GERAET	MATNR		EQUI
10	1	95000439		10001996
10	1	95000469		10002028
10	1	95000780		10003420
10	2	STROM		10000003
10	2	TEST55		10000013
10	2	TEST1		10000022
10	2	95000435		10000086
10	3	95000442		10001922
10	3	TEST3		10001988
10	3	95000439		10001998
10	4	STROM		10000005
20	1	95000177		10000061
20	1	95000681		10002903
20	1	95000761		10003349
20	1	95000180		10003618
20	1	96050001		10005034
20	2	95000177		10000062
20	2	95000681		10002904
20	2	95000761		10003350
20	2	96050001		10005035
20	3	95000177		10000063
20	10	96050001		10005043
20	11	95000177		10000071
20	11	95000681		10002913
20	11	96050001		10005044
20	12	95000177		10000083
20	12	95000681		10002914
20	12	96050001		10005045
20	13	95000177		10000084
20	13	95000681		10003050
20	13	96050001		10005046
20	14	95000681		10003051
20	14	96050001		10005047
20	15	95000681		10003052
30	7754	95000074		10001233
30	8699	95000071		10001124
30	9357	95000071		10001145
30	9701	95000076		10002055
30	9702	95000076		10002056
30	9703	95000076		10002057
Die Equi Felder stehen alle untereinander-> ist hier ein Darstellungsproblem

Sortieren tue ich nach SPARTE, GERAET, EQUI

EQUI ist zwar da noch nicht doppelt drin kann aber vorkommen.

Manchmal funktioniert es nach deiner Lösung, manchmal anscheinend nicht so wirklich. Aber den Fehler hattest du ja auch erkannt. Die Variante mit dem String halte ich für recht schwer umsetzbar, da ich mind. noch 40 andere Felder in der Tabelle habe und keine Keys ausser dem Mandanten.

Aber es kann doch nicht so schwer sein sowas zu realisieren, oder vertue ich mich da so.

Re: Tabelle nur Dublikate

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
Kenny hat geschrieben:Aber es kann doch nicht so schwer sein sowas zu realisieren, oder vertue ich mich da so.
Ein Problem ist die Feldreihenfolge und die AT-Verarbeitung.

Ein AT NEW-Block wird immer dann angesprungen wenn sich das angebene Feld oder ein Feld links von dem angebenen Feld zum vorherigen Schleifendurchlauf verändert.
Damit die AT NEW-Verarbeitung funktioniert, muss demnach die Feldreihenfolge in der ITAB passen. Demnach müssen bei dir die ersten drei Felder der Itab: SPARTE; GERAET; EQUI sein. Die MATNR stört dir also den AT NEW EQUI Block, da er auch angesprungen wird, wenn sich nur die MaterialNummer ändert.

Wenn du die Feldreihenfolge nicht ändern kannst, dann musst du dir die Gruppenstufenverarbeitung selber programmieren (über Hilfsvariablen).
Gruß Hendrik

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hallo Hendrick,
ok wenn ich jetzt also das ganze selbst in einer internen Tabelle sortiere, sodass SPARTE; GERAET; EQUI in Reihenfolge stehen, wie sieht dass so eine Umsetzung aus?
Ich bekomme das nicht hin!

Re: Tabelle nur Dublikate

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
Kenny hat geschrieben:ok wenn ich jetzt also das ganze selbst in einer internen Tabelle sortiere, sodass SPARTE; GERAET; EQUI in Reihenfolge stehen, wie sieht dass so eine Umsetzung aus?

Code: Alles auswählen.

SORT gt_data BY sparte gernr equnr.

 LOOP AT gt_data ASSIGNING <gs_data>.
*   aktuellen Key zählen
    gv_cnt = gv_cnt + 1.

    AT END OF equnr.
*     Wie oft gab es den Key, alle die es nicht mehrfach gibt löschen
      IF gv_cnt < 2.
        WRITE: / 'Key:', <gs_data>-sparte, <gs_data>-gernr, <gs_data>-equnr, 'wurde gelöscht!'.
        DELETE gt_data WHERE sparte = <gs_data>-sparte AND gernr = <gs_data>-gernr AND equnr = <gs_data>-equnr.
      ENDIF.
      CLEAR gv_cnt.
    ENDAT.
  ENDLOOP.
Gruß Hendrik

Re: Tabelle nur Dublikate

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hi Hendrik,

vielen lieben Dank für deine Hilfe.

Eine letzte Frage habe ich noch:

Wenn ich jetzt nicht bis Equi die Dublicate haben möchte sondern nur bis Geraet, dann würde ich den Quelltest doch so anpassen müssen, oder:

Code: Alles auswählen.

LOOP AT gt_data ASSIGNING <gs_data>.
*   aktuellen Key zählen
    gv_cnt = gv_cnt + 1.

    AT END OF geraet.
*     Wie oft gab es den Key, alle die es nicht mehrfach gibt löschen
      IF gv_cnt < 2.
        WRITE: / 'Key:', <gs_data>-sparte, <gs_data>-geraet 'wurde gelöscht!'.
        DELETE gt_data WHERE sparte = <gs_data>-sparte AND gernr = <gs_data>-geraet.
      ENDIF.
      CLEAR gv_cnt.
    ENDAT.
  ENDLOOP.
 
Richtig?

Vergleichbare Themen

5
Antw.
5317
Views
2
Antw.
6440
Views
Join über Tabelle trotz Pool/Cluster Tabelle
von em.tie » 04.12.2006 18:38 • Verfasst in ABAP® für Anfänger
1
Antw.
4878
Views
1
Antw.
2325
Views
Select aus einer Tabelle mit Bedingung aus weiteren Tabelle
von Dyrdek » 02.01.2017 13:16 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.