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

정보·팁

ABAP SQL ② 정렬, 그룹, 조인, WITH(CTE), CASE, COALESCE

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

3줄 요약

  • GROUP BY를 쓰면 SELECT 목록의 일반 칼럼은 전부 GROUP BY에 들어가야 하고, ORDER BY를 안 쓰면 결과 순서는 보장되지 않아요.

  • 조인은 INNER, LEFT/RIGHT OUTER가 기본이고, 임시 결과를 여러 번 쓸 때는 WITH +이름 AS ( SELECT ... )로 CTE를 만들 수 있어요.

  • 널 값은 CASE 나 coalesce( )로 대체해요.

어떤 상황에서 쓰나요

지난 글에서는 SELECT 문의 기본 구조와 결과를 받는 방법을 살펴봤어요. 이번에는 조회 결과를 정렬하고, 그룹별로 집계하고, 여러 테이블을 연결하는 방법을 알아봐요. 중간 결과를 재사용하는 CTE와 NULL을 처리하는 표현식도 함께 다뤄요.

여러 소스의 행을 연결하는 조인, 같은 기준으로 묶는 그룹 처리, 출력 순서를 정하는 정렬은 서로 다른 역할입니다. 아래 그림에서 각 단계가 결과를 어떻게 바꾸는지 비교해 보세요.

AI 설명 그림: 연결하고 묶고 정렬하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 연결하고 묶고 정렬하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

GROUP BY, HAVING, ORDER BY

  • GROUP BY는 같은 값을 가진 행을 하나로 묶어요. SELECT 목록에 직접 적었거나 SQL 식의 인수로 쓴 칼럼은 모두 GROUP BY에 적어야 하고, 집계 함수(MIN, MAX, SUM 등)만 예외예요.

  • HAVING은 묶인 결과에 조건을 걸고, GROUP BY와 함께만 써요.

  • ORDER BY를 안 쓰면 결과 순서가 정해져 있지 않아요. ORDER BY PRIMARY KEY처럼 기본 키 순서나 칼럼과 ASCENDING/DESCENDING을 지정할 수 있어요. GROUP BY와 같이 쓰면 ORDER BY의 칼럼은 GROUP BY 에도 있어야 해요.

조인과 합집합

  • INNER JOIN ... ON ...: 두 소스의 조건이 참인 행끼리 합쳐요. 같은 이름의 칼럼이 있으면 a~comp1처럼 칼럼 선택자를 써요.

  • LEFT OUTER JOIN / RIGHT OUTER JOIN: 반대편에 조건에 맞는 행이 없어도 한쪽의 행은 결과에 남고 반대편 칼럼은 널 값이 돼요.

  • UNION: 두 쿼리의 결과 행을 하나의 결과로 합쳐요. 중복 제거에는 DISTINCT 같은 방법이 있어요.

CTE (WITH)

  • 중간 결과가 필요할 때, 특히 여러 번 쓸 때 써요. ABAP SQL 에서는 SELECT FROM subquery를 할 수 없는데 CTE가 이를 가능하게 해요.

  • 구조: WITH + 쉼표로 구분한 CTE 정의(이름은 +로 시작, 선택적 칼럼 이름 목록, AS ( SELECT ... )) + 마지막 메인 SELECT. 각 CTE는 다른 CTE 나 메인 쿼리에서 최소 한 번은 써야 해요. SELECT 루프를 열면 ENDWITH.로 닫아요. CTE 결과에는 클라이언트 칼럼이 없어요.

WITH
  +sum_seats AS (
    SELECT carrid, connid, SUM( seatsocc ) AS sum_seats
      FROM zdemo_abap_fli
      GROUP BY carrid, connid )
SELECT * FROM +sum_seats
  ORDER BY carrid, connid
  INTO TABLE @DATA(result).

SQL 식

  • CASE: 단순(한 피연산자의 값을 비교, WHEN 'EUR' THEN 'A')과 검색형(WHEN length( carrname ) <= 5 THEN 'small')이 있어요. ELSE를 안 쓰면 해당하지 않는 경우의 결과는 널 값이에요.

  • coalesce( a, b ): 외부 조인이 만든 널 값을 다른 값으로 바꿔요. 치트시트는 이것이 CASE WHEN a IS NOT NULL THEN a ELSE b END의 줄임이라고 설명해요. ABAP 에는 널 값이 따로 없고, DB가 돌려준 널 값이 ABAP 변수로 넘어올 때 그 타입의 초기값이 된다는 점을 짚어요.

주의할 점

  • CTE(WITH)와 일부 SQL 식은 비교적 최근 문법이에요. 어느 릴리스부터인지는 치트시트 요약에 적혀 있지 않으니, 내 시스템에서 문법 검사를 하세요.

  • 치트시트의 SQL 예제는 문법을 보여 주는 용도예요. 인덱스 사용, 실행 계획 같은 성능 평가는 다루지 않아요(성능은 별도 *Performance Notes* 편이 있어요).

  • 치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/03_ABAP_SQL.md#specifying-clauses-to-order-group-and-set-conditions-for-the-result-set

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - ABAP SQL Clauses, Joins, CTE, SQL Expressions · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 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

아직 댓글이 없어요.

정보·팁 목록전체 목록