Interne Tabellen zusammenführen

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

Interne Tabellen zusammenführen

Beitrag von Basler84 (ForumUser / 60 / 31 / 0 ) »
Hi zusammen,

Ich habe zwei interne Tabellen:

Tabelle 1 mit den Feldern NAME, ADRESSE, GEBURTSDATUM, NAMEID

bis auf NAMEID sind alle Felder gefüllt.

Tabelle 2 mit den Feldern NAME und NAMEID.

Jetzt möchte ich das Feld NAMEID aus Tabelle 2 zu allen passenden Werten in Tabelle 1 dazu lesen wo NAME(Tabelle1) = NAME(Tabelle2) ist.

Das ganze ist natürlich mit einem Loop möglich. Aber gibts da ggf eine schickere Lösung um nicht immer über die Tabelle loopen zu müssen?

Grüße
Basler

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


Re: Interne Tabellen zusammenführen

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
Hallo Basler84,

Code: Alles auswählen.

MOVE-CORRESPONDING itab1 TO itab2
grüße 4byte
Es gibt 10 Menschen die binär verstehen :)

Re: Interne Tabellen zusammenführen

Beitrag von DeathAndPain (Top Expert / 1933 / 252 / 410 ) »
Das ganze ist natürlich mit einem Loop möglich. Aber gibts da ggf eine schickere Lösung um nicht immer über die Tabelle loopen zu müssen?
Mich hätte interessiert, wie Du Dir solch Loop vorstellst (um zu verstehen, von welchem gedanklichen Ansatz Du herkommst). Auch wäre interessant, ob Du von einem SAP-System >= 7.40 ausgehst (und daher die dort möglichen Syntaxen nutzen kannst).

Wenn Du alle Werte in Tabelle 1 durchgehen willst, wirst Du dafür einen LOOP (oder etwas Vergleichbares) brauchen. Für Tabelle 2 hingegen brauchst Du das nicht. Nach alter Syntax (< 7.40) würdest Du da einfach schreiben:

Code: Alles auswählen.

LOOP AT tabelle1.
  READ TABLE tabelle2 WITH KEY NAME = tabelle1 TRANSPORTING NAMEID.
  " Do whatever with tabelle2-NAMEID
ENDLOOP.
Mit 7.40 geht es kosmetisch noch schöner.

Sinnvollerweise sollte (zumindest) tabelle2 vom Typ SORTED TABLE WITH UNIQUE KEY NAME sein, damit der READ TABLE effizient sucht.

Re: Interne Tabellen zusammenführen

Beitrag von Basler84 (ForumUser / 60 / 31 / 0 ) »
Hi zusammen und schonmal danke für die Antworten.
DeathAndPain hat geschrieben:
Das ganze ist natürlich mit einem Loop möglich. Aber gibts da ggf eine schickere Lösung um nicht immer über die Tabelle loopen zu müssen?
Mich hätte interessiert, wie Du Dir solch Loop vorstellst (um zu verstehen, von welchem gedanklichen Ansatz Du herkommst). Auch wäre interessant, ob Du von einem SAP-System >= 7.40 ausgehst (und daher die dort möglichen Syntaxen nutzen kannst).

Wenn Du alle Werte in Tabelle 1 durchgehen willst, wirst Du dafür einen LOOP (oder etwas Vergleichbares) brauchen. Für Tabelle 2 hingegen brauchst Du das nicht. Nach alter Syntax (< 7.40) würdest Du da einfach schreiben:

Code: Alles auswählen.

LOOP AT tabelle1.
  READ TABLE tabelle2 WITH KEY NAME = tabelle1 TRANSPORTING NAMEID.
  " Do whatever with tabelle2-NAMEID
ENDLOOP.
Mit 7.40 geht es kosmetisch noch schöner.

Sinnvollerweise sollte (zumindest) tabelle2 vom Typ SORTED TABLE WITH UNIQUE KEY NAME sein, damit der READ TABLE effizient sucht.
Haben Abap 7.5. :)

Mein aktueller Ansatz ist

Code: Alles auswählen.

loop at Tabelle1 assigning field-symbol(<fs_tab1>).
   read table Tabelle2 assigning field-symbol(<fs_tab2>)
      with key name = <fs_tab1>-name.
   if sy-subrc = 0.
      <fs_tab1>-nameid = <fs_tab2>-nameid
   endif.
endloop.
Hatte gehofft es gibt irgend ein schickeres Konstrukt ohne loop.. :(

Grüße
Basler

Re: Interne Tabellen zusammenführen

Beitrag von DeathAndPain (Top Expert / 1933 / 252 / 410 ) »
Du willst ja alle Felder von tabelle1 ändern, also wird es ohne LOOP nicht gehen. Meines Wissens gibt es keinen direkten Befehl, der zwei interne Tabellen über einen Schlüssel mergt.

Aber da Du 7.50 hast, kannst Du folgendes schreiben (eckige Klammern durch geschweifte ersetzt, da der CODE-Tag des Forums sonst explodiert. Das musst Du bei Copy&Paste rückwandeln):

Code: Alles auswählen.

loop at tabelle1 assigning field-symbol(<fs_tab1>).
  assign tabelle2{ nameid = <fs_tab1>-nameid }-name to field-symbol(<fs_name>).
  check sy-subrc = 0.
  <fs_tab1>-name = <fs_name>.
endloop.
Oder, falls Dir das besser gefällt, ohne Hilfsfeldsymbol, dafür aber mit Ausnahmebehandlung für den Fall, dass es die nameid in tabelle2 nicht gibt:

Code: Alles auswählen.

loop at tabelle1 assigning field-symbol(<fs_tab1>).
  try.
    <fs_tab1>-name = tabelle2{ nameid = <fs_tab1>-nameid }-name.
    catch CX_SY_ITAB_LINE_NOT_FOUND.
  endtry.
endloop.
Beides sieht IMHO eleganter aus als der READ TABLE.

Sofern Performance eine Rolle spielt, ist anzumerken, dass der READ TABLE vernachlässigbar schneller ist als die ASSIGN-Variante. Die letzte Lösung ist annähernd genauso schnell, wenn es die nameid in tabelle2 gibt, andernfalls aber ein Stück langsamer, da er dann die Ausnahmeklasse anschmeißen muss.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Basler84


Seite 1 von 1

Vergleichbare Themen

2
Antw.
15362
Views
Zwei interne Tabellen zusammenführen
von _Manfred_ » 28.04.2005 13:57 • Verfasst in ABAP® für Anfänger
10
Antw.
9004
Views
zwei interne Tabellen zusammenführen => ALV
von Mark33 » 22.08.2012 07:00 • Verfasst in ABAP® für Anfänger
20
Antw.
6232
Views
Zusammenführen zweier int Tabellen
von Willow » 18.01.2005 10:29 • Verfasst in Basis
1
Antw.
2393
Views
Tabellen/Strukturen zusammenführen
von m4rkusr » 19.10.2006 08:00 • Verfasst in ABAP® Core
3
Antw.
1252
Views

Ü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.

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1579
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8188