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

정보·팁

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

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

3줄 요약

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

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

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

어떤 상황에서 쓰나요

지난 회에서 SELECT 의 뼈대를 봤다면, 이번에는 실무 쿼리에서 자주 나오는 정렬, 집계, 조인, 임시 결과, 조건식을 모아요. 서브쿼리를 FROM 에 직접 못 쓰는 ABAP SQL 의 제약을 CTE 가 어떻게 풀어 주는지도 나와요.

핵심 내용

`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

아직 댓글이 없어요.

정보·팁 목록전체 목록