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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 20

3줄 요약

  • LOOP AT의 WHERE·FROM/TO·STEP·USING KEY로 처리할 행과 순서를 정해요.

  • 같은 값을 가진 행끼리 처리하려면 GROUP BY로 그룹을 만들고 LOOP AT GROUP으로 구성원을 읽어요.

  • COLLECT는 같은 키의 숫자 값을 합산해요. 사용할 테이블의 키와 종류를 먼저 확인하세요.

어떤 상황에서 쓰나요

보고서에서는 데이터를 한 행씩 처리하기도 하고, 항공사처럼 같은 값을 가진 행끼리 묶어 계산하기도 해요. 연재의 마지막 글에서는 LOOP AT의 처리 범위를 정하는 방법과 GROUP BY·COLLECT로 그룹별 데이터를 다루는 방법을 알아봐요.

같은 기준을 가진 행들을 먼저 묶으면 그룹마다 필요한 계산을 수행하기 쉽습니다. 아래 그림처럼 전체 행, 그룹, 그룹별 결과를 나누어 생각해 보세요.

AI 설명 그림: 같은 기준으로 묶어 처리하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 같은 기준으로 묶어 처리하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

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

아직 댓글이 없어요.

정보·팁 목록전체 목록