Skip to Content
0
Former Member
Feb 11, 2008 at 01:54 AM

Improve performance - sql statement

96 Views

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