Zwei Datenbanktabellen zusammenführen

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

Zwei Datenbanktabellen zusammenführen

Beitrag von dominoblau (ForumUser / 3 / 0 / 0 ) »
Hallo zusammen,

ich bin absoluter ABAP-Neuanfänger und habe folgendes Problem bzw. Ziel:

Ich möchte zwei Tabellen in eine interne Tabelle zusammenführen.
Das Problem hierbei ist aber, dass die beiden Datenbanktabellen nicht ganz die gleiche Struktur bzw. die selben Spalten besitzen.
Dennoch möchte ich die beiden Tabellen zusammenfügen, wo Sie die gleichen Spalten besitzen.

Hierbei hätte ich aber noch eine Besonderheit und zwar:
In einer Tabelle 2 befindet sich das Feld "Datum" mit Datentyp DATS (mit dem Format tt.mm.yyyy)

In der anderen Tabelle (Tabelle 1) findet man hingegen das Feld "DatumMMJJJJ" mit Datentyp NUMC (mit dem Format (mm.yyyy).

Jetzt zu meiner eigentlichen Frage:
Wie kann ich die beiden Tabellen zu einer internen Tabelle zusammenführen.
Meine Idee wäre hierbei gewesen:
1. Ich kopiere zunächst die beiden Tabelle zunächst in interne Tabellen
2. Ich ändere das Feld der beiden Tabelle von tt.mm.yyyy in mm.yyyy ab
3. Ich führe die beiden Tabelle zusammen bzw. ich füge die Tabelle 1 an Tabelle 2 an.

Könnt ihr bitte mir hierbei helfen, wie ich dies schaffen könnte.

Besten Dank und viele Grüße


Re: Zwei Datenbanktabellen zusammenführen

Beitrag von deejey (Specialist / 340 / 95 / 29 ) »
Was bedeutet "zusammenfügen", n Sätze in einen Satz? Dafür braucht es passende Schlüsselbegriffe um sie zuordnen zu können.

Datum YYYYMMTT in YYYYMM zu überführen bedeutet Informationsverlust, ist das gewollt? Ansonsten kannst eine Struktur bauen die die größete Tabelle enthält und die Felder der anderen hinzufügen die du zusätzlich in der ITab haben willst. Das kann per CORRESPONDING versorgt werden (also MOVE nur die Felder die einen passenden Namen haben), das Daten sammeln und verdichten kann wenn erforderlich per COLLECT geschehen, hier muss man nachlesen wie COLLECT vorgeht

Re: Zwei Datenbanktabellen zusammenführen

Beitrag von DeathAndPain (Top Expert / 1502 / 167 / 337 ) »
Im Prinzip geht das so (mindestens Release 7.40):

Code: Alles auswählen.

DATA: I1 TYPE STANDARD TABLE OF DATENBANKTABELLE1 WITH EMPTY KEY,
      I2 TYPE STANDARD TABLE OF DATENBANKTABELLE2 WITH EMPTY KEY.

  SELECT * INTO I1 FROM DATENBANKTABELLE1 WHERE whatever.
  SELECT * INTO I2 FROM DATENBANKTABELLE2 WHERE whatever.

  I1 = CORRESPONDING #( BASE ( I1 ) I2 EXCEPT DATUMSFELD ).
Dann hast Du beide Tabellen in i1 vereinigt (wobei Du von i2 nur die Spalten drin hast, die es mit dem Namen auch in i1 gibt). Das Problem ist nur das Datumsfeld. In obenstehendem Beispiel lasse ich dieses mit dem EXCEPT DATUMSFELD außen vor.

Wenn Du das auch drin haben möchtest, musst Du Dir eine Hilfstabelle basteln, in der Du das Feld vorher in das Format von i1 konvertierst, beispielsweise so:

Code: Alles auswählen.

TYPES: BEGIN OF HILFSTABELLE.
         INCLUDE STRUCTURE I2.
TYPES:   DATUM_IM_I1_FORMAT(6) TYPE N,
       END OF HILFSTABELLE.

DATA: I1 TYPE STANDARD TABLE OF DATENBANKTABELLE1 WITH EMPTY KEY,
      I2 TYPE STANDARD TABLE OF DATENBANKTABELLE2 WITH EMPTY KEY,
      HILFSTABELLE TYPE STANDARD TABLE OF HILFSTABELLE WITH EMPTY KEY.

  SELECT * INTO I1 FROM DATENBANKTABELLE1 WHERE WHATEVER.
  SELECT * INTO I2 FROM DATENBANKTABELLE2 WHERE WHATEVER.

  HILFSTABELLE = CORRESPONDING #( I2 ).

  LOOP AT HILFSTABELLE ASSIGNING FIELD-SYMBOL(<HILFSTABELLE>).
    <HILFSTABELLE>-DATUM_IM_I1_FORMAT = DATUMSFELD+4(2) && DATUMSFELD(4). " Der Tag fällt flach, den gibt es in Deiner ersten Tabelle ja nicht
  ENDLOOP.

  I1 = CORRESPONDING #( BASE ( I1 ) HILFSTABELLE MAPPING DATUMSFELD = DATUM_IM_I1_FORMAT ).

Re: Zwei Datenbanktabellen zusammenführen

Beitrag von dominoblau (ForumUser / 3 / 0 / 0 ) »
Vielen Dank für eure Hilfe.

Ich habe den vorherigen Code mal versucht.

Leider bekomme ich immer folgende Fehlermeldung:
"Feld DATUM unbekannt. Es ist weder in einer der angegebenen Tabellen enthalten...

Anbei mein Code:

TYPES: BEGIN of HILFSTABELLE.
INCLUDE STRUCTURE z9misdaten.
TYPES: DJJMM(6) TYPE N,
END OF HILFSTABELLE.

data: itab_z9aupidt TYPE STANDARD TABLE OF z9aupidt WITH EMPTY KEY.
data: itab_z9misdaten TYPE STANDARD TABLE OF z9misdaten WITH EMPTY KEY.
data: HILFSTABELLE TYPE STANDARD TABLE OF HILFSTABELLE WITH EMPTY KEY.

START-OF-SELECTION.

Select * FROM z9misdaten
INTO TABLE itab_z9misdaten.

Select * from z9aupidt
INTO TABLE itab_z9aupidt.

HILFSTABELLE = CORRESPONDING #( itab_z9misdaten ).

LOOP AT HILFSTABELLE ASSIGNING FIELD-SYMBOL(<HILFSTABELLE>).
<HILFSTABELLE>-DJJMM = DATUM+4(2) && DATUM(4).

itab_z9aupidt = CORRESPONDING #( BASE ( itab_z9aupidt ) HILFSTABELLE MAPPING DATUM = DJJMM ).

Re: Zwei Datenbanktabellen zusammenführen

Beitrag von a-dead-trousers (Top Expert / 3618 / 125 / 942 ) »
Versuchs mal mit

Code: Alles auswählen.

<HILFSTABELLE>-DJJMM = <HILFSTABELLE>-DATUM+4(2) && <HILFSTABELLE>-DATUM(4).
Außerdem verwende bitte den CODE-Tag wenn du Quellcode hier im Forum postest. Danke.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Seite 1 von 1

Aktuelle Forenbeiträge

F4 Hilfe für Dynprofeld
vor 14 Stunden von ewx gelöst 6 / 46

Vergleichbare Themen

Zwei interne Tabellen zusammenführen
von _Manfred_ » 28.04.2005 13:57
zwei interne Tabellen zusammenführen => ALV
von Mark33 » 22.08.2012 07:00
Tabellen/Strukturen zusammenführen
von m4rkusr » 19.10.2006 08:00
Interne Tabellen zusammenführen
von Basler84 » 01.08.2018 16:49
Quants nicht zusammenführen
von ParLaMenT » 01.04.2018 11:08