SAP

SAP ABAP Select 구문, TIPS

selectall 2026. 1. 23. 13:13

 

SELECT

: ABAP 에서 DB 테이블을 조회할 때 쓰는 구문

 

  • 기본구조
SELECT 필드들
  FROM 테이블
  INTO 대상
  WHERE 조건.

 

  • 기본예제
SELECT *    
  FROM MARA
 WHERE MTART = 'FERT'
 ORDER BY MATNR 
  INTO TABLE @DATA(LT_MARA).
  • SELECT * : 모든 컬럼, 특정필드 만 조회 시 컬럼 나열 (MATNR, MATKL…)
  • FROM mara : 자재 마스터 기본 테이블
  • INTO TABLE : 내부 테이블로 받음
  • @DATA(...) : inline 선언 (7.40+)
  • INNER JOIN : 양쪽 다 있는 데이터
  • LEFT JOIN : 왼쪽 기준
  • a~, b~ : 테이블 별칭
  • ORDER BY: 지정 컬럼 순 정렬
  • 집계합수 (COUNT, SUM 등) / FOR ALL ENTRIES 등 다양하게 사용 가능

SELECT 시, 꿀팁이라 자주 같이 쓰는 구문

 

ABAP SELECT 안의 CASE

: DB 에서 바로 조건 분기해서 값 만들어오는 용도

  • CASE … WHEN … THEN … ELSE … END
SELECT MATNR, MTART,
		   CASE
		    WHEN MTART = 'FERT' THEN '완제품'
		    WHEN MTART = 'HALB' THEN '반제품'
		   ELSE '기타'
  END AS MTRAT_TEXT
FROM MARA
INTO TABLE @DATA(LT_MARA).

 

 

필드 값 할당

: SELECT 구문에서 특정 컬럼에 지정된 값 할당

DATA: BEGIN OF LS_RESULT,
        MATNR      TYPE MARA-MATNR,
        MTART      TYPE MARA-MTART,
        ICON       TYPE ICON-ID,
      END OF LS_RESULT,
      LT_RESULT LIKE TABLE OF LS_RESULT.

SELECT MATNR, MTART,
       CASE
        WHEN MTART = 'FERT' THEN '@5B@'  " 녹색
        WHEN MTART = 'HALB' THEN '@5C@'  " 빨강
        ELSE '@5D@'  " 노랑
       END AS ICON
FROM MARA
INTO CORRESPONDING FIELDS OF TABLE @LT_RESULT.

 

→ 자재 유형에 따라 ICON 색상 지정

 

WITH 구문

: 임시 결과 집합 정의

  • 공통 테이블 표현식 ( CTE, Common Table Expression ) 으로 해당 문 내에서 반복하여 참조 가능한 임시 결과 집합
  • 가독성 높이며, 복잡한 쿼리 단순화
  • 사용 CASE: 특정 조건에 SUM, AVG 하는 컬럼의 GROUP BY 기준이 다름. MAIN 은 하나로 두고 SUM 과 AVG 추출 로직을 따로 씀. MAIN 에 JOIN 하여 SUM, AVG 값 할당
  • 예시
" 도착 배정이 안되어 있는 곳을 제외한 데이터
WITH +MAIN_SPFLI AS ( SELECT CARRID
                            ,CONNID
                            ,COUNTRYFR
                            ,CITYFROM
                            ,AIRPFROM
                            ,COUNTRYTO
                            ,CITYTO
                            ,AIRPTO
                            ,FLTIME
                            ,DEPTIME
                            ,ARRTIME
                            ,DISTANCE
                            ,DISTID
                            ,FLTYPE
                            ,PERIOD
                        FROM SPFLI
                       WHERE AIRPFROM NE @SPACE ),

" 항공사/출발나라/단위가 같은 항목끼리 GROUP BY 하여 운항 총거리 데이터
+SUM AS ( SELECT CARRID,
                 COUNTRYFR,
                 DISTID,
             SUM( DISTANCE ) AS TOT_DIST
            FROM SPFLI
           GROUP BY CARRID, COUNTRYFR, DISTID ),

" 항공사/단위가 같은 항목끼리 GROUP BY 하여 운항 거리 평균 데이터
+AVG AS ( SELECT CARRID,
                 DISTID,
             AVG( DISTANCE ) AS AVG_DIST
            FROM SPFLI
           GROUP BY CARRID, DISTID )

" 항공사 데이터
SELECT A~CARRID   , A~CONNID   , A~COUNTRYFR,
       A~CITYFROM , A~AIRPFROM ,
       A~COUNTRYTO, A~CITYTO   ,
       A~AIRPTO   , A~FLTIME   ,
       A~DEPTIME  , A~ARRTIME  ,
       A~DISTANCE , A~DISTID   ,
       A~FLTYPE   , A~PERIOD   ,
       B~TOT_DIST,
       C~AVG_DIST
  FROM +MAIN_SPFLI   AS A
 INNER JOIN +SUM AS B
                     ON A~CARRID EQ B~CARRID
                    AND A~DISTID EQ B~DISTID
 INNER JOIN +AVG AS C
                     ON A~CARRID EQ C~CARRID
                    AND A~DISTID EQ C~DISTID
 INTO TABLE @DATA(GT_TEST).
 
  SORT GT_TEST BY CARRID CITYFROM DISTID.

→ 항공사 데이터 중 TOT_DIST 는 동일 항공사/출발나라/단위 총 거리, AVG_DIST 는 동일 항공사/단위의 평균 거리를 의미