Folgende Benutzer bedankten sich beim Autor Unit605 für den Beitrag:
Nadine_2706
Wenn ich recht in der Annahme gehe, dass du die Einträge aus LFM1 ermitteln möchtest, die nicht EKPO und EKKO vorkommen, dann sollte dies helfen:Unit605 hat geschrieben:Nicht nur Reden schwingen... besser machen.
Code: Alles auswählen.
TYPES:
BEGIN OF ts_lfm1,
lifnr TYPE lfm1-lifnr,
ekorg TYPE lfm1-ekorg,
elifnr TYPE ekko-lifnr,
END OF ts_lfm1.
DATA:
lt_lfm1 TYPE STANDARD TABLE OF ts_lfm1 WITH DEFAULT KEY.
SELECT l~lifnr l~ekorg k~lifnr
INTO TABLE lt_lfm1
FROM lfm1 AS l
LEFT OUTER JOIN ekko AS k
ON l~lifnr EQ k~lifnr
INNER JOIN ekpo AS p
ON p~ebeln EQ k~ebeln
WHERE l~ekorg EQ '0020'
AND p~bukrs EQ '0020'
AND p~werks EQ '0010'.
DELETE lt_lfm1 WHERE elifnr IS NOT INITIAL.
Code: Alles auswählen.
select P~BUKRS P~WERKS P~KUNNR K~LIFNR
from EKPO as P inner join EKKO as K on P~EBELN = K~EBELN
into corresponding fields of table LT_LIEF
where P~BUKRS = '0300'
and P~WERKS = '0060'.
Code: Alles auswählen.
select LIFNR EKORG from LFM1 into table LT_LFM1
where EKORG = '0060'.
Wie entferne ich abe die Einträge mithilfe der zweiten Abfrage aus dem ersten Ergebnis???Bei weiterer Betrachtung würde ich eher dazu raten, zwei SELECTS (EKPO INNER JOIN EKKO und LFM1) abzusetzten und dann die Ergebnisse vergleichen und mithilfe der zweiten Abfrage alle Einträge aus dem ersten Ergebnis entfernen.
a-dead-trousers hat geschrieben:Wenn man das dann noch alles sortiert/verdichtet hat und mittels LOOP AT und READ TABLE ... BINARY SEARCH umsetzt, dürfte das Programm weitaus schneller sein als die direkte Datenbankabfrage.
Code: Alles auswählen.
sort LT_LFM1 by LIFNR
delete adjacent duplicates from LT_LFM1 comparing LIFNR
loop at LT_LIEF assigning <ls_lief>.
read table LT_LFM1 transporting no fields binary search with key LIFNR eq <ls_lief>-LIFNR.
if sy-subrc eq 0.
delete LT_LIEF.
endif.
endloop.
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
black_adept
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Nadine_2706