Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 10022

Re: Join for getting sold to party name using 4 tables.

$
0
0

Hi Matthew,

 

Thank you for your suggestion,

 

I check the below code but the performance of FAE is better than inner join why?

 

TABLES : EKKO , EKPO , LFA1.

TYPES : BEGINOF TY_EKKO,
         EBELN TYPE EKKO-EBELN,
         BUKRS TYPE EKKO-BUKRS,
         BSTYP TYPE EKKO-BSTYP,
         BSART TYPE EKKO-BSART,
         LIFNR TYPE EKKO-LIFNR,
         ENDOF TY_EKKO.

TYPES : BEGINOF TY_EKPO,
         EBELN TYPE EKPO-EBELN,
         EBELP TYPE EKPO-EBELP,
         MATNR TYPE EKPO-MATNR,
         WERKS TYPE EKPO-WERKS,
         LGORT TYPE EKPO-LGORT,
         ENDOF TY_EKPO.

TYPES : BEGINOF TY_LFA1,
         LIFNR TYPE LFA1-LIFNR,
         NAME1 TYPE LFA1-NAME1,
         ENDOF TY_LFA1.

TYPES : BEGINOF TY_FINAL,
         EBELN TYPE EKKO-EBELN,
         BUKRS TYPE EKKO-BUKRS,
         BSTYP TYPE EKKO-BSTYP,
         BSART TYPE EKKO-BSART,
         LIFNR TYPE EKKO-LIFNR,
         EBELP TYPE EKPO-EBELP,
         MATNR TYPE EKPO-MATNR,
         WERKS TYPE EKPO-WERKS,
         LGORT TYPE EKPO-LGORT,
         ENDOF TY_FINAL.

DATA : IT_EKKO TYPESTANDARDTABLEOF TY_EKKO,
        IT_EKPO TYPESTANDARDTABLEOF TY_EKPO,
        IT_LFA1 TYPESTANDARDTABLEOF TY_LFA1.

DATA : WA_EKKO TYPE TY_EKKO,
        WA_EKPO TYPE TY_EKPO,
        WA_LFA1 TYPE TY_LFA1.

DATA : IT_FINAL1 TYPESTANDARDTABLEOF TY_FINAL,
        IT_FINAL2 TYPESTANDARDTABLEOF TY_FINAL,
        IT_FINAL3 TYPESTANDARDTABLEOF TY_FINAL.

DATA : WA_FINAL1 TYPE TY_FINAL,
        WA_FINAL2 TYPE TY_FINAL,
        WA_FINAL3 TYPE TY_FINAL.

*SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : S_BUKRS FOR EKKO-BUKRS .
SELECT-OPTIONS : S_WERKS FOR EKPO-WERKS .
SELECT-OPTIONS : S_LIFNR FOR LFA1-LIFNR.

*SELECTION-SCREEN : END OF BLOCK B1.

INITIALIZATION.

START-OF-SELECTION.

   DATA: START       TYPEI,
           END       TYPEI,
           DIF       TYPEI.

   CLEAR : START , END , DIF.

   GETRUNTIMEFIELD START.

   SELECT  A~EBELN A~BUKRS A~BSTYP A~BSART A~LIFNR
           B~EBELP B~MATNR B~WERKS B~LGORT
      FROM EKKO AS A INNER JOIN EKPO AS B
         ON A~EBELN = B~EBELN
         INTOTABLE IT_FINAL1
          WHERE A~BUKRS in S_BUKRS
           AND  B~WERKS in S_WERKS
           AND  A~LIFNR in S_LIFNR.

   GETRUNTIMEFIELDEND.
   DIF = END - START.

   WRITE: /001 'Time for Join (Header to Item)' ,
           055':', DIF, 'microseconds'.

   CLEAR : START , END ,DIF.

   GETRUNTIMEFIELD START.

   SELECT  A~EBELN A~BUKRS A~BSTYP A~BSART A~LIFNR
          B~EBELP B~MATNR B~WERKS B~LGORT
     FROM EKPO AS B INNER JOIN EKKO AS A
        ON A~EBELN = B~EBELN
         INTOTABLE IT_FINAL2
         WHERE A~BUKRS in S_BUKRS
          AND  B~WERKS in S_WERKS
          AND  A~LIFNR in S_LIFNR.

   GETRUNTIMEFIELDEND.

   DIF = END - START.


   WRITE: /001 'Time for Join (Item to Header)' ,
           055':', DIF, 'microseconds'.

   CLEAR : START , END ,DIF.

   GETRUNTIMEFIELD START.

   SELECT EBELN BUKRS BSTYP BSART LIFNR FROM EKKO
      INTOTABLE IT_EKKO
         WHERE BUKRS IN S_BUKRS
           AND LIFNR IN S_LIFNR.
   IF IT_EKKO ISNOTINITIAL.
     SORT IT_EKKO BY EBELN.
     SELECT EBELN EBELP MATNR WERKS LGORT FROM EKPO
       INTOTABLE IT_EKPO
           FORALL ENTRIES IN IT_EKKO
               WHERE EBELN = IT_EKKO-EBELN
                 AND WERKS IN S_WERKS.
   ENDIF.

   LOOPAT IT_EKPO INTO WA_EKPO.
     READTABLE IT_EKKO INTO WA_EKKO WITHKEY EBELN = WA_EKPO-EBELN BINARYSEARCH.
     IF SY-SUBRC = 0.
       WA_FINAL3-EBELN  = WA_EKKO-EBELN.
       WA_FINAL3-BUKRS  = WA_EKKO-BUKRS.
       WA_FINAL3-BSTYP  = WA_EKKO-BSTYP.
       WA_FINAL3-BSART  = WA_EKKO-BSART.
       WA_FINAL3-LIFNR  = WA_EKKO-LIFNR.
       WA_FINAL3-EBELP  = WA_EKPO-EBELP.
       WA_FINAL3-MATNR  = WA_EKPO-MATNR.
       WA_FINAL3-WERKS  = WA_EKPO-WERKS.
       WA_FINAL3-LGORT  = WA_EKPO-LGORT.
       APPEND WA_FINAL3 TO IT_FINAL3.
       CLEAR : WA_FINAL3.
     ENDIF.
     CLEAR : WA_EKKO , WA_EKPO.
   ENDLOOP.

   GETRUNTIMEFIELDEND.

   DIF = END - START.

   WRITE: /001 'Time for For All Entries in',
           055':', DIF, 'microseconds'.

END-OF-SELECTION.

 

Output:

 



 

 



Viewing all articles
Browse latest Browse all 10022

Trending Articles