안녕하세요, SAP ABAP에 NEW OPEN SQL이 도입되면서 SELECT 구문에서 CASE를 사용하여 편리하게 데이터를 처리할 수 있게 됐습니다.
이번 글에서는 SELECT CASE 문에 대해 리뷰하겠습니다.
먼저, 글을 이해하기 쉽게 간단한 Table을 만들었습니다.
각 팀별로 두 개의 스코어를 가지고 있으며, 각 팀마다 보너스 코드를 부여했습니다.
그럼 SELECT CASE 문을 활용하여 ITAB에 해당 데이터와 SCORE_SUM 필드를 채워보겠습니다.
< 예시 시나리오 >
위에서 만든 ZNSQL 테이블에서 NAME, SCORE01, SCORE02 데이터를 추출하고 SCORE_SUM 테이블 데이터를 상황에 맞게 데이터를 입력한다.
SCORE_SUM = BONUS가 A이면 SCORE01 과 SCORE02를 더한 값에 곱하기 lv_ten(* 10)
BONUS가 B이면 100
BONUS가 없으면 SCORE01 + SCORE02
SELECT에서 CASE문은 다음과 같이 쓸 수 있습니다.
< CASE문 구조 >
SELECT <필드명>, <필드명>,
CASE <CASE 조건 기준>
WHEN < CASE 조건> THEN ( <입력값> )
END AS <결과 필드명>
<SELECT CASE 설명>
> 기본적으로 CASE문 구조는 SELCET 절에서 조회 필드 선언하는 구간에서 사용된다.
> 일반적인 CASE 문과 같이 CASE에 기준이 되는 값을 적는다.
> 그리고 WHEN에 조건이 되는 값을 적는다.
> 일반적인 CASE 문에서는 사용하지 않는 THEN 구문은 괄호() 안에 원하는 결과 값을 입력하면 된다.
> ELSE 구문도 사용할 수 있으며 ELSE에는 WHEN 과 THEN이 생략되고 결과 값만 입력하면 쓸 수 있다.
> 마지막으로 ENDCASE가 아닌 END로 끝나며 AS(알리아스)를 통해 결과값을 입력한 필드명을 입력해 준다.
> SELECT에서 CASE를 사용하면 필드 순서가 바뀔 수 있으니 적절하게 소트를 사용해 준다.
이중 CASE 문
정식 명칭이 있는지 모르겠는데 제가 그냥 하다가 되길래 쓰고 있는 구문이라 편하게 이중 CASE 문이라고 칭하겠습니다.
SELECT 문에 CASE문을 사용하고 WHEN 구절에서 또 한 번 CASE를 쓸 수 있습니다.
이 조건에 맞게 테이블을 다시 구성해 봤습니다.
스코어 1과 2 점수를 팀마다 통일하였고 멀티플에 따라 보너스 배율을 적용시켜 보겠습니다.
< 예시 시나리오 >
위에서 만든 ZNSQL 테이블에서 NAME, SCORE01, SCORE02 데이터를 추출하고 SCORE_SUM 테이블 데이터를 상황에 맞게 데이터를 입력한다.
SCORE_SUM = BONUS가 A이면서 MULTIPLY이 2이면 SCORE01과 SCORE02를 더한 값에 곱하기 2
BONUS가 A이면서 MULTIPLY이 3이면 SCORE01과 SCORE02를 더한 값에 곱하기 3
BONUS가 A이면서 MULTIPLY이 2이면 SCORE01과 SCORE02를 더한 값에 곱하기 4
BONUS가 B이면 100
< 이중 CASE문 구조 >
SELECT <필드명>, <필드명>,
CASE <CASE 조건 기준>
WHEN < CASE 조건> THEN ( CASE < CASE_2 조건 기준 >
WHEN <CASE_2 조건> THEN ( 결과 값 ) END )
END AS <결과 필드명>
CASE문 THEN 구절 안에 CASE를 한번 더 반복해서 사용할 수 있습니다.
다만, THEN 안에서는 CASE 문이 END로 끝나며 AS(알리아스)를 사용하지 않습니다.
이렇게 Select 문에서 CASE를 사용하는 법에 대해 리뷰하였습니다.
OPEN SQL을 활용해 더 효율성이 높은 SQL을 구성 할 수 있습니다.
'SAP > OPEN SQL' 카테고리의 다른 글
ABAP DB Connection (0) | 2024.05.22 |
---|---|
ABAP SELECT 계산식(더하기, 곱하기 등) (0) | 2023.03.09 |