Source code below is an example of using count in the loop.
REPORT ZHIS_TUN_004_BEFORE.
DATA: BEGIN OF IT_EKKO OCCURS 0 ,
EBELN LIKE EKKO-EBELN,
LIFNR LIKE EKKO-LIFNR,
ITEM_CNT TYPE I,
END OF IT_EKKO .
DATA: BEGIN OF IT_EKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
END OF IT_EKPO.
SELECT EBELN INTO CORRESPONDING FIELDS OF TABLE IT_EKKO
FROM EKKO.
SORT IT_EKKO BY EBELN.
SELECT EBELN INTO CORRESPONDING FIELDS OF TABLE IT_EKPO
FROM EKPO.
SORT IT_EKPO BY EBELN.
LOOP AT IT_EKKO.
CLEAR: IT_EKKO-ITEM_CNT.
LOOP AT IT_EKPO WHERE EBELN = IT_EKKO-EBELN.
IT_EKKO-ITEM_CNT = IT_EKKO-ITEM_CNT + 1.
ENDLOOP.
IF IT_EKKO-ITEM_CNT EQ 0.
DELETE IT_EKKO.
CONTINUE.
ENDIF.
ENDLOOP.
WRITE:/ LINES( IT_EKKO ) .
The results of analysis of the source code of the above in RUNTIME ANALYSIS are as follows:
It took most of the work time in the ‘Internal Processing Blocks'
For change of data in the loop is large, performance is low.
The following is the source code that use 'JOIN' in order to improve this.
REPORT ZHIS_TUN_004_AFTER.
TABLES: EKKO,
EKPO.
DATA: BEGIN OF IT_EKKO OCCURS 0 ,
EBELN LIKE EKKO-EBELN,
LIFNR LIKE EKKO-LIFNR,
ITEM_CNT TYPE I,
END OF IT_EKKO .
DATA: BEGIN OF IT_EKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
END OF IT_EKPO.
SELECT A~EBELN COUNT(*) AS ITEM_CNT
INTO CORRESPONDING FIELDS OF TABLE IT_EKKO
FROM EKKO AS A JOIN EKPO AS B ON B~EBELN = A~EBELN
GROUP BY A~EBELN.
WRITE:/ LINES( IT_EKKO ) .
If possible, after processing in the database, Bring only the results of value