ABAP 내부 테이블 ④ LOOP AT 변형, GROUP BY, COLLECT 쓰는 법
3줄 요약
LOOP AT은FROM/TO,WHERE,STEP,USING KEY로 처리 범위와 순서를 좁힐 수 있어요.그룹별 처리는
AT NEW ...대신LOOP AT itab ... GROUP BY ...와 안쪽LOOP AT GROUP으로 해요. 정렬이나 칼럼 순서에 기대지 않아요.값을 합산해 모을 때는
COLLECT가 있지만, 유일 키가 있는 해시 테이블에 주로 쓰라고 권해요.
어떤 상황에서 쓰나요
연재의 마지막 회예요. 테이블을 한 줄씩 훑는 LOOP AT 과 "항공사별로 묶어서 처리"하는 그룹 처리는 보고서와 인터페이스 코드에서 자주 나와요. 예전에는 SORT 후 AT NEW 로 처리했지만, 치트시트는 SQL 의 GROUP BY 와 비슷한 LOOP ... GROUP BY 를 소개해요.
핵심 내용
`LOOP AT` 기본과 범위 제한
받는 곳은 작업 영역, 필드 심볼, 데이터 참조 중에서 골라요(읽기 편과 같아요).
순서는 테이블 종류가 정해요. 인덱스 테이블은 인덱스 오름차순, 해시 테이블은 넣은 순서예요.
USING KEY로 보조 키를 주면 그 키의 순서를 따라요.루프 중
sy-tabix는 현재 줄 번호예요(해시 테이블은 0). 쓰려면LOOP직후에 도우미 변수에 저장하세요. 안쪽 문장이 덮어쓸 수 있어요.FROM/TO로 인덱스 범위(인덱스 테이블만),WHERE로 조건,STEP으로 간격과 방향을 정해요.STEP -1은 거꾸로,STEP 2는 두 줄에 한 줄씩이에요. 음수STEP에서는FROM이TO보다 커야 해요.루프를 중단하는 문장은
CONTINUE(현재 줄만 넘김),CHECK(조건이 거짓이면 현재 줄을 넘김),EXIT(루프 종료)예요.새 테이블을 만들 때는 반복 표현식
VALUE #( FOR wa IN itab ( wa * 2 ) )도 방법이에요.
`GROUP BY` 치트시트는 SPFLI 테이블을 예로 한 칼럼, 여러 칼럼, 그룹 키 바인딩의 순서로 보여 줘요.
" 한 칼럼으로 묶기 (대표 줄 바인딩)
LOOP AT spfli_tab INTO wa GROUP BY wa-carrid.
" wa 는 각 그룹의 첫 줄이에요
LOOP AT GROUP wa INTO DATA(member).
" 이 그룹에 속한 모든 줄
ENDLOOP.
ENDLOOP.
" 여러 칼럼, 그룹 키를 따로 받기 + 크기와 번호
LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(key).
" key-key1, key-key2, key-index, key-size
ENDLOOP.*대표 줄 바인딩*: 작업 영역
wa가 그룹의 첫 줄을 대표해요.*그룹 키 바인딩*:
INTO key를 붙이면wa대신 키 변수가 그룹을 대표해요.GROUP SIZE,GROUP INDEX,WITHOUT MEMBERS는 이 방식에서만 쓸 수 있어요. 구성원이 필요 없으면WITHOUT MEMBERS로 시간과 메모리를 아낄 수 있어요.여러 칼럼으로 묶으면 그룹 키가 구조체(
key-key1)가 돼요.이전에 쓰던
AT NEW그룹 레벨 처리는 칼럼 순서와 정렬에 기대는 "투박한" 방식이라고 치트시트가 평가해요.
`COLLECT`
숫자 칼럼의 값을 같은 키의 줄에 더해 모아요. 유일 기본 키가 있는 테이블, 특히 해시 테이블에 쓰라고 권해요. 치트시트의 예제는 항공편별 점유 좌석 수를
COLLECT로 합산한 결과와LOOP ... GROUP BY+ 안쪽 루프로 합산한 결과가 같음을ASSERT로 확인해요.
주의할 점
STEP추가와 일부GROUP BY추가 구문(WITHOUT MEMBERS,GROUP SIZE등)은 최신 릴리스 문법이에요. 어느 릴리스부터인지 원문 요약에서는 확인하지 못했으니 내 시스템에서 문법 검사를 해 보세요.치트시트는
COLLECT를 해시 테이블에 쓰라고만 말해요. 표준 테이블에서 성능이나 정확성에 문제가 생기는 구체적 조건은 이 글에서 확인하지 못했어요.치트시트는 계속 갱신되는 문서예요. 이 글의 그룹핑 부분은 2024년 1월에 처음 올라온 *Grouping* 편을, 루프와
COLLECT부분은 *Internal Tables* 편을 읽고 정리했어요(제가 읽은 판은 2026년 10월 기준). 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/11_Internal_Tables_Grouping.md
출처와 이용 안내
원문: ABAP Cheat Sheets - Internal Tables: Grouping and Loops, Collecting · 작성자 SAP SE and contributors SAP-samples · 작성일 2024-01-22 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기