Code: Alles auswählen.
FORM get_lieferdaten_wm TABLES it_del STRUCTURE zwm_s_ta001
" ir_datum
USING iv_vstel.
TYPES: BEGIN OF lty_likp,
vbeln TYPE vbeln_vl,
lprio TYPE lprio,
vsbed TYPE vsbed.
TYPES: END OF lty_likp.
DATA: ls_del TYPE zwm_s_ta001,
lt_likp TYPE TABLE OF lty_likp,
ls_likp TYPE lty_likp.
FIELD-SYMBOLS: <ls_del> TYPE zwm_s_ta001.
SELECT * FROM shp_idx_pick
INTO CORRESPONDING FIELDS OF TABLE it_del
WHERE vstel = iv_vstel
AND lvstk <> ' '.
"Lieferdaten anreichern
CHECK LINES( it_del ) > 0.
SELECT vbeln lprio vsbed INTO TABLE lt_likp
FROM likp
FOR ALL ENTRIES IN it_del
WHERE vbeln = it_del-vbeln.
"Daten abmischen
LOOP AT it_del ASSIGNING <ls_del>.
"Anzahl Positionen ermitteln:
SELECT COUNT(*) FROM lips
WHERE vbeln = <ls_del>-vbeln.
<ls_del>-anzpo = sy-dbcnt.
"Zusatzdaten übergeben
READ TABLE lt_likp INTO ls_likp WITH KEY vbeln = <ls_del>-vbeln.
IF sy-subrc = 0.
<ls_del>-lprio = ls_likp-lprio.
<ls_del>-vsbed = ls_likp-vsbed.
DELETE lt_likp INDEX sy-index.
ENDIF.
ENDLOOP.
ENDFORM. Thomas17 hat geschrieben:was meint Ihr? Was könnte ich hier performanter/eleganter lösen?
Code: Alles auswählen.
FORM get_lieferdaten_wm TABLES it_del STRUCTURE zwm_s_ta001
" ir_datum
USING iv_vstel.
SELECT shp_idx_pick~vbeln
shp_idx_pick~vstel
shp_idx_pick~kodat
shp_idx_pick~route
shp_idx_pick~lvstk
shp_idx_pick~kostk
shp_idx_pick~kunnr
likp~lprio
likp~vsbed
COUNT( DISTINCT lips~posnr )
INTO TABLE gt_data
FROM shp_idx_pick
JOIN likp
ON likp~vbeln = shp_idx_pick~vbeln
JOIN lips
ON lips~vbeln = shp_idx_pick~vbeln
WHERE shp_idx_pick~vstel = iv_vstel
AND lvstk <> ' '
GROUP BY shp_idx_pick~vbeln
shp_idx_pick~vstel
shp_idx_pick~kodat
shp_idx_pick~route
shp_idx_pick~lvstk
shp_idx_pick~kostk
shp_idx_pick~kunnr
likp~lprio
likp~vsbed.
ENDFORM. Jein, kommt immer drauf an was genau gelesen werden soll.Thomas17 hat geschrieben:Ich habe bis jetzt immer die Erfahrung bei großen Datenmengen gemacht,
dass Joins mich mehr Zeit/Performance kosten, im Vergleich zu 1mal Daten
einlesen und dann abzuarbeiten.
D.h. das ist generell von der DB abhängig und Du empfiehlst bei schnellen
DB's einen komplexeren Join?
Wegen dem SyntaxcheckThomas17 hat geschrieben: Warum Groupst Du bei so vielen Argumenten und nicht nur bei VBELN?
Code: Alles auswählen.
COUNT( DISTINCT lips~posnr ) AS posnr.Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Thomas17