Code: Alles auswählen.
select ... "Die Felder die du brauchst
from tabelle1
inner join tabelle2
on tabelle1~belnr = tabelle2~belnr
inner join tabelle3
on tabelle1~awkey = tabelle1~vbeln
...
=kaufikauf hat geschrieben:Das Problem mit dem Typ hab ich einfach in einer lokalen Struktur angepasst (hinten werden 4 Ziffern entfernt).
Diese Art der Abfrage funktioniert nicht. Bei JOINs müssen die Felder für den Vergleich zumindest denselben Typ UND dieselbe Länge haben.kaufikauf hat geschrieben:... nur leider wirft die Tabelle dann immer 0 zurück.
Code: Alles auswählen.
data: lt_vbeln type standard table of vbeln with default key.
select ... "Die Felder die du brauchst
from tabelle1
inner join tabelle2
on tabelle1~belnr = tabelle2~belnr
into lt_data1
...
* Die notwendigen Daten für die zweite Selektion extrahieren
loop at lt_data1 assigning <ls_data1>.
append <ls_data1>-awkey to lt_vbeln.
endloop.
* Die Selektion verdichten (Performance)
sort lt_vbeln.
delete adjacent duplicates from lt_vbeln.
select ... "Die Felder die du brauchst
from tabelle3
into lt_data2
for all entries in lt_vbeln
where tabelle3~vbeln eq lt_vbeln-table_line
...
Code: Alles auswählen.
select ... "Die Felder die du brauchst
from tabelle1
inner join tabelle2
on tabelle1~belnr = tabelle2~belnr
into lt_data1
...
Code: Alles auswählen.
select ... "Die Felder die du brauchst
from tabelle1
inner join tabelle2
on tabelle1~belnr = tabelle2~belnr
into table lt_data1
...
Code: Alles auswählen.
loop at lt_data1 assigning <ls_data1>.
ld_vblen = <ls_data1>-awkey.
loop at lt_data2 assigning <ls_data2> where vblen = ld_vblen.
* Der Eintrag kommt in beiden Tabellen (mehrmals) vor!
endloop.
endloop.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
kaufikauf
Code: Alles auswählen.
SELECT b~belnr b~bukrs b~hkont b~blart b~gjahr b~budat
c~belnr c~awkey
INTO CORRESPONDING FIELDS OF TABLE itab2
FROM ( bsis AS b INNER JOIN bkpf AS c ON b~belnr = c~belnr )
WHERE b~bukrs IN bukrs
AND hkont = p_hkont
AND b~blart = p_blart
AND b~gjahr IN gjahr
AND b~budat IN budat.
IF sy-subrc <> 0.
MESSAGE s014(/asu/general) WITH text-001.
EXIT.
ENDIF.
SELECT b~mandt b~bukrs b~xblnr b~hkont b~gjahr b~blart b~budat b~bldat b~dmbtr b~belnr
c~mandt c~vbelv c~matnr c~rfmng c~meins c~waers c~vbtyp_n c~vbeln
INTO CORRESPONDING FIELDS OF TABLE itab
FROM ( bsis AS b
INNER JOIN vbfa AS c ON b~mandt = c~mandt )
FOR ALL ENTRIES IN itab2
WHERE bukrs IN bukrs
AND hkont = p_hkont
AND blart = p_blart
AND vbtyp_n IN vbtyp_n
AND gjahr IN gjahr
AND budat IN budat
AND vbeln = itab2-awkey.
Siehe http://www.abapforum.com/forum/viewtopi ... 879#p72270kaufikauf hat geschrieben:Nur ein Frage hätte ich noch, bei deinem Coding ist es ja so, dass ich jetzt nur aus der Tabelle 3(VBFA) lesen kann.
Ich brauche aber auch noch Daten aus der Tabelle 1 (BSIS). Die Verbindung soll ja die VBELN von VBFA und die AWKEY von BKPF sein.
Code: Alles auswählen.
loop at lt_data1 assigning <ls_data1>.
ld_vblen = <ls_data1>-awkey.
...
loop at lt_data2 assigning <ls_data2>
where vblen = ld_vblen and mandt = <ls_data1>-mandt and ... "Alles was sonst noch für den richtigen Join benötigt wird.
append initial line to lt_data3 assigning <ls_data3>.
move-corresponding <ls_data1> to <ls_data3>.
move-corresponding <ls_data2> to <ls_data3>.
endloop.
endloop.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
kaufikauf