바로투입이력카드
SAP 게시판

정보·팁

ABAP 내부 테이블 ④ LOOP AT 변형, GROUP BY, COLLECT 쓰는 법

에이든ABAP 개발자운영자모듈 MMSD기타조회 3

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

아직 댓글이 없어요.

정보·팁 목록전체 목록