본문 바로가기

ABAP 프로그래밍 개념/OPEN SQL

CASE Function 2 : Complex Case


Complex Case


... CASE WHEN sql_cond1 THEN result1
        [WHEN sql_cond2 THEN result2]
        [WHEN sql_cond3 THEN result3]
          ...
        [ELSE resultn]
    END ...


Open SQL에서의 Complex case distinction (Searched CASE)는 Logical Expression sql_cond1, sql_cond2 등을 평가하고, 첫 번째로 참인 논리 식 이후에 피연산자 result를 결과로 생성합니다. 어떤 논리 식도 참이 아닌 경우 ELSE 이후에 지정된 결과가 선택됩니다. ELSE가 지정되지 않은 경우 결과는 제로 값(Zero Value)입니다. 결과 result1, result2 등은 열(Column), 리터럴(Literal), 호스트 변수(Host Variable) 및 호스트 식(Host Expression)을 포함한 모든 SQL 표현식이 될 수 있습니다.

결과는 서로 호환되어야 하며 공통 결과 유형을 결정할 수 있어야 합니다. 데이터 유형 result1, result2 등은 동일하거나 데이터 유형이 다른 모든 데이터 유형의 값을 완전히 표현할 수 있어야 합니다. 그렇지 않은 경우 정적으로 지정된 유형은 구문 오류를 발생시키고 동적으로 지정된 유형은 CX_SY_DYNAMIC_OSQL_SEMANTICS 클래스의 예외를 발생시킵니다. 결과는 가장 큰 값 범위를 가진 항목의 사전 유형을 가지게 됩니다.

만약 Open SQL 문의 조건으로 복잡한 CASE를 사용하는 경우, 쿼리의 클라이언트별 데이터 원본 또는 쓰기 문의 대상의 클라이언트 열은 쿼리 또는 쓰기에 CLIENT SPECIFIED 추가를 사용하여 자동 클라이언트 처리가 해제된 경우에만 WHEN 조건의 피연산자로 사용됩니다.

SAP Example1 : Complex Case 

FLTIME 필드를 Comple CASE 안에서 평가하는 예시입니다.

SPFLI 테이블에서 FLTIME이 1) 100보다 적으면 'short', 2) 100과 300 사이면 'medium', 3) 그 외의 경우는 'long'으로 구분하여 fltime 필드에 담는 예시입니다.

SELECT FROM spfli
       FIELDS carrid,
              connid,
              cityfrom,
              cityto,
              CASE WHEN fltime < 100 THEN 'short'
                   WHEN fltime BETWEEN 100 AND 300 THEN 'medium'
                   ELSE 'long'
              END AS fltime
       ORDER BY carrid, connid
       INTO TABLE @DATA(result).

 

SAP Example2 : Complex Case 

 SFLIGHT 테이블에서, 현재 좌석 판매 상황에 따라 구분한 예시입니다.

  SELECT
    FROM SFLIGHT
    FIELDS CARRID,
              CONNID,
              FLDATE,
              SEATSMAX,
              SEATSOCC,
              DIVISION( SEATSOCC, SEATSMAX, 2 ) * 100 AS PERCENTAGE,
              CASE WHEN DIVISION( SEATSOCC, SEATSMAX, 2 ) * 100 > 90 THEN 'Green'
                      WHEN DIVISION( SEATSOCC, SEATSMAX, 2 ) * 100 BETWEEN 70 AND 90 THEN 'YELLOW'
                      ELSE 'RED'
              END AS SEAT_STATUS
    WHERE CARRID = 'AA'
    INTO TABLE @DATA(result).

반응형

'ABAP 프로그래밍 개념 > OPEN SQL' 카테고리의 다른 글

COALESCE Function  (2) 2023.09.04
CASE Function 1 : Simple Case  (0) 2023.09.03
String Function  (0) 2023.08.09
Numeric Function  (0) 2023.08.05
OPEN SQL의 사용  (0) 2023.08.05