안녕하세요, 이번 포스팅에서는 테이블 중복검사 또는 집계를 사용할 때 유용하게 사용하는 LOOP AT GROP BY에 대한 리뷰를 해보겠습니다.
활용법보다는 사용법을 기준으로 예시를 만들었으니 참고해 주시길 바랍니다.
먼저, 시작하기전에 위의 테이블을 기준으로 LOOP를 돌려보겠습니다.
CARRID와 CONNID를 기준으로 GROUP을 돌리면 어떻게 데이터가 들어가는지 체크해 보겠습니다.
LOOP AT GROUP BY
1. 예시 CODE
이 예시에서는 Carrid와 Connid를 그룹으로 만들었습니다.
그에 따라, LH + 0004 / LH + 0454 / LH +0455 총 3개의 그룹에 10개의 데이터가 들어있습니다.
첫 번째 LOOP인 GROUP BY에서는 그룹이 된 첫 번째 데이터를 읽으며 예시에서는 총 3번의 LOOP를 돌게 됩니다.
두 번째 LOOP인 AT GROUP 은 1번 그룹을 돌고 루프를 빠져나와 1번 루프를 다시 돌며 2번째 그룹을 돌고 3번째 그룹까지 돌게 됩니다.
위 예시에서는 그룹 1(LH + 0004)을 4번 돌고 빠져나가고 그룹 2(LH + 0454)를 2번 돌고 빠져나가고, 그룹 3(LH +0455 )을 4번을 돌고 빠져나갑니다.
2. 실행결과
실행 결과 첫 번째 LOOP에 INTO 구조체에는 값이 들어가지 않는 걸 확인할 수 있습니다.
또한 첫 번째 LOOP의 GROUP BY의 Field-Symbol인 <FS_GROUP>에는 키로 지정한 Carrid와 Connid만 들어간 것을 확인할 수 있습니다.
마지막으로 두 번째 LOOP AT GROUP의 Field-Symbol인 <FS_LOOP> 그룹마다 그룹의 데이터를 읽으며 키가 아닌 CLASS필드까지 읽는 것을 확인할 수 있습니다.
3. LOOP AT GROUP BY CODE
SORT <ITAB>
* GROUP을 만들기 위해 작업 전 SORT는 필수입니다.
LOOP AT GROUP BY <ITAB> ASSIGNING FILED-SYMBOL(<FS_01>)
GROUP BY ( KEY = <FS_01>-KEY
KEY = <FS_02>-KEY
SIZE = GROUP SIZE
INDEX = GROUPINDEX )
ASSIGNING FILED-SYMBOL(<FS_02>).
LOOP AT GROUP <FS_02> ASSIGNING FIELD-SYMBOL(<FS_03>).
ENDLOOP.
ENDLOOP.
* GROUP BY에는 COUNT 건수를 집계해 주는 SIZE와 그룹에 인덱스를 관리하는 GROUPINDEX 옵션도 가지고 있습니다.
* LOOP AT GROUP 은 FIELD-SYMBOL이 필수이다.
* LOOP 안에 LOOP를 써도 되나요?? -> LOOP안에 LOOP를 쓰는 것이 퍼포먼스를 차지하는 것은 사실입니다. 하지만 GROUP BY 구문의 경우 실무에서도 사용되는 구문으로 사용하다 보면 사용방법에 따라 효율성이 엄청 차이가 나는 것을 확인하실 수 있을 것입니다.
또한 이 구문은 DB에 접근하는 것이 ITAB을 그룹 지어 돌다 보니 일반적인 LOOP와는 성향이 다르다는 것을 느끼 실 수 있을 것입니다.
LOOP 안에서 SELECT를 한다던가 대용량 테이블을 일반적인 LOOP 방법으로 두 번 돌 리던가 하는 구문은 절대적으로 피하시는 것을 추천드립니다.
* 설명이 이해 안 되시는 분은 직접 디버깅을 돌리면서 어떤 값이 어떤 순서로 들어가는지 확인해 보는 것을 추천드립니다.
감사합니다!!
'SAP > ABAP' 카테고리의 다른 글
ABAP Class에 대해 알아보자 #1 (0) | 2023.05.15 |
---|---|
FIeld-Symbol로 간편하게 코딩하기 / Loop ~ Field-Symbol (0) | 2023.03.28 |
ALV 필드 카탈로그 자동 입력 펑션('LVC_FIELDCATALOG_MERGE ') (0) | 2023.03.19 |
코딩 없이 SELECTION-SCREEN에 ICON 넣는 법 / Selection-screen icon(No-coding) (0) | 2023.03.14 |
ALV DATA_CHANGED EVENT 사용하기 (0) | 2023.03.08 |