LOOP AT itab - GROUP BY
ABAP New syntax 인 Loop at Group by는 SQL의 Group by처럼 그룹단위로 데이터를 처리할 수 있습니다.
기존에 Internal Table에서 특정 필드를 기준으로 Group 처리를 위해 AT New와 같은 구문을 사용하였는데, Group by를 통해 이해하기 쉽고 간단하게 처리할 수 있습니다.
# 사용 예시
DATA LT_T001 TYPE STANDARD TABLE OF T001.
DATA(LO_DEMO_OUTPUT) = CL_DEMO_OUTPUT=>NEW( ).
DATA(LO_RANDOM) = CL_ABAP_RANDOM_INT=>CREATE( SEED = CONV I( SY-UZEIT ) MIN = 1000 MAX = 9999 ).
LT_T001 = VALUE #( FOR I = 0 UNTIL I > 1000000
( BUKRS = LO_RANDOM->GET_NEXT( ) ) ).
DATA: LV_TIME1 TYPE I,
LV_TIME2 TYPE I.
SELECT BUKRS, BUTXT
FROM T001
INTO TABLE @DATA(LT_TMP).
IF SY-SUBRC EQ 0.
SORT LT_TMP BY BUKRS.
ENDIF.
DATA: LT_TMP_SORT1 TYPE STANDARD TABLE OF T001 WITH UNIQUE SORTED KEY KEY1 COMPONENTS BUKRS,
LT_TMP_SORT2 TYPE SORTED TABLE OF T001 WITH UNIQUE KEY BUKRS.DATA: LT_BSEG TYPE STANDARD TABLE OF BSEG.
LT_BSEG = VALUE #(
( BUKRS = '1000' GJAHR = '2023' BELNR = '11111' BUZEI = '001' )
( BUKRS = '1000' GJAHR = '2023' BELNR = '11111' BUZEI = '002' )
( BUKRS = '1000' GJAHR = '2023' BELNR = '11111' BUZEI = '003' )
( BUKRS = '1000' GJAHR = '2023' BELNR = '11122' BUZEI = '001' )
( BUKRS = '1100' GJAHR = '2023' BELNR = '11022' BUZEI = '001' )
( BUKRS = '1100' GJAHR = '2023' BELNR = '11022' BUZEI = '002' )
( BUKRS = '1100' GJAHR = '2023' BELNR = '11022' BUZEI = '003' )
).
LOOP AT LT_BSEG INTO DATA(LS_BSEG) GROUP BY ( BUKRS = LS_BSEG-BUKRS
GJAHR = LS_BSEG-GJAHR
BELNR = LS_BSEG-BELNR
SIZE = GROUP SIZE
INDEX = GROUP INDEX ) ASCENDING
ASSIGNING FIELD-SYMBOL(<LFS_GROUP>).
WRITE:/ 'HEADING', <LFS_GROUP>-SIZE, <LFS_GROUP>-BUKRS, <LFS_GROUP>-BELNR, <LFS_GROUP>-GJAHR.
LOOP AT GROUP <LFS_GROUP> ASSIGNING FIELD-SYMBOL(<LFS_ITEMS>).
WRITE:/ 'ITEM', SPACE, SPACE, SPACE, <LFS_ITEMS>-BUZEI.
ENDLOOP.
ENDLOOP.
'ABAP > Syntax' 카테고리의 다른 글
[Syntax] NEW - Instance Operator (0) | 2023.10.19 |
---|---|
[Syntax] FOR - 반복 표현식 (1) | 2023.10.17 |
[OpenSQL] WITH - CTE 서브쿼리 (0) | 2023.07.21 |
[Syntax] FILTER - Internal table 데이터 필터링 (0) | 2023.07.20 |
[Syntax] CORRESPONDING - Structure 및 Internal Table 값 복사 (0) | 2023.07.20 |
댓글