Hi,
I am still new to abap. Below is a simple sql that I hope to streamline, so that the performance could be improved. It has taken some amount of time to process. How can I improve the sql below? Thanks
IF v_vtweg IS NOT INITIAL.
cond_vtweg = 'vbak~vtweg = v_vtweg'.
ENDIF.
IF p_werks IS NOT INITIAL.
cond_werks = 'vbap~werks = p_werks'.
ENDIF.
SELECT
vbap~vbeln " Order #
vbap~posnr " Order Position/Item
vbak~kunnr " Customer Code
kna1~name1 " Customer Name
vbap~matnr " Material
vbap~zlcrd " CRD
vbap~zlcrdp2 " CRDP2
vbap~zledd " EDD/MAD
vbap~zlfsd " FSD
vbap~kwmeng " Order Qty
vbap~werks " Plant
vbap~lgort " Sales Org
vbap~netwr " Order Amount
vbak~vtweg " Dist. Channel
lips~lgnum " Warehouse
lips~vbeln " Delivery #
lips~lfimg " Delivery Qty
lips~kcmeng " Cumulative Delivery Qty
ltak~tanum " TO #
ltak~kquit " TO Confirmed status
ltak~druck " TO Print Status
vttk~tknum " Shipment #
vttk~dpabf " Planned date for Shipment Completion
vbfa_p~vbeln " Proforma Invoice #
vbfa_p~erdat " Invoice Date
INTO TABLE i_vbap_rob
FROM vbap
JOIN vbak ON vbakvbeln = vbapvbeln
JOIN kna1 ON vbakkunnr = kna1kunnr
JOIN vbfa ON vbfavbelv = vbapvbeln
AND vbfaposnv = vbapposnr
JOIN lips ON lipsvbeln = vbfavbeln
AND lipsposnr = vbfaposnn
JOIN ltak ON ltakvbeln = vbfavbeln
JOIN vbfa AS vbfa_s
ON vbfa_svbelv = vbfavbeln
JOIN vbfa AS vbfa_p
ON vbfa_pvbelv = vbfavbeln
AND vbfa_pposnv = vbfaposnn
JOIN vttk ON vttktknum = vbfa_svbeln
JOIN ltap ON ltaptanum = ltaktanum
WHERE vbfa~vbtyp_n = 'J'
AND ( vbfa~vbtyp_v = 'C' " Regular Order
OR vbfa~vbtyp_v = 'I' )" Sample Order
AND lips~fkrel = 'A' " Select Deliveries relevant for Billing (in case split deliveries)
AND vbfa_s~vbtyp_n = '8'
AND vbfa_p~vbtyp_n = 'U'
In case there are multiple Porforma Inv., pick the latest copy.
AND vbfa_pvbeln = ( SELECT MAX( pvbeln )
FROM vbfa AS p
WHERE pvbelv = vbfavbeln
AND pposnv = vbfaposnn
AND p~vbtyp_n = 'U'
)
AND NOT EXISTS ( SELECT * " exclude SO items with PGI & Billing
FROM vbfa AS a
WHERE avbelv = vbapvbeln
AND aposnv = vbapposnr
AND ( a~vbtyp_n = 'R' OR " exclude PGI
a~vbtyp_n = 'M' " exclude Billing
)
)
AND ltak~kquit = 'X'
AND ltap~vdifm EQ 0 "SSR5465.n
AND vbak~kunnr IN s_kunnr
AND vbap~matnr IN s_matnr
AND vbap~vbeln IN s_vbeln
AND vbak~vkorg IN s_vkorg
AND vbap~lgort IN s_lgort
AND vttk~tknum IN s_ship
AND vttk~dpabf IN s_sdate
AND (cond_vtweg)
AND (cond_werks)
ORDER BY vbapvbeln vbapposnr.
DELETE ADJACENT DUPLICATES FROM i_vbap_rob COMPARING ALL FIELDS. "SSR5465.n