[Oracle] CASE WHEN 조건 여러개 (다중 조건, 다중 칼럼)

오라클 쿼리문에서 CASE WHEN 표현식의 조건을 여러개 부여하기 위해서는 WHEN~THEN을 반복해서 사용할 수 있으며, 다중 조건을 부여할 수 있다. 하나의 조건절(WHEN~THEN)에서 여러개 칼럼을 조건으로 부여하기 위해서는 AND, OR 연산자를 사용하면 된다.

 

목차
  1. CASE WHEN 조건 여러개 부여 (다중 조건)
  2. CASE WHEN 여러개 칼럼 조건 부여 (다중 칼럼)

 

CASE WHEN 조건 여러개 부여 (다중 조건)

SELECT ename
     , job
     , CASE WHEN job = 'ANALYST'  THEN 'CASE 1'
            WHEN job = 'MANAGER'  THEN 'CASE 2'
            WHEN job = 'SALESMAN' THEN 'CASE 3'
       END AS case_result
  FROM emp
 WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')

 

 

CASE 표현식에서 여러개의 조건을 부여하기 위해서는 WHEN ~ THEN 구문을 반복해서 사용하면 된다.

 

WHEN~THEN 구문을 처음부터 순차적으로 값을 비교하여 일치하는 조건이 있으면 THEN 이후 값을 반환 후 더 이상 값을 비교하지 않고 종료한다.. 일치하는 조건이 없을 경우 NULL을 반환한다.

 

CASE WHEN 여러개 칼럼 조건 부여 (다중 칼럼)

SELECT ename
     , job
     , deptno
     , sal
     , CASE WHEN job = 'ANALYST'  AND deptno = 20 AND sal >= 3000 THEN 'CASE 1'
            WHEN job = 'MANAGER'  AND deptno = 10 AND sal >= 2000 THEN 'CASE 2'
            WHEN job = 'SALESMAN' AND deptno = 30 AND sal >= 1500 THEN 'CASE 3'
       END AS case_result
  FROM emp
 WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')

 

 

여러개의 칼럼을 비교하는 조건을 부여해야 할 경우 AND 연산자를 사용하여 조건을 부여하면 된다.

모든 칼럼의 AND 조건을 만족해야 해당 값을 반환한다.

 

OR 연산자를 사용하여 여러개의 칼럼 조건 부여

SELECT ename
     , job
     , deptno
     , sal
     , CASE WHEN job = 'ANALYST'  OR deptno = 20 OR sal >= 3000 THEN 'CASE 1'
            WHEN job = 'MANAGER'  OR deptno = 10 OR sal >= 2000 THEN 'CASE 2'
            WHEN job = 'SALESMAN' OR deptno = 30 OR sal >= 1500 THEN 'CASE 3'
       END AS case_result
  FROM emp
 WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')

 

 

여러개의 칼럼을 OR 연산자로 조건을 부여할 수 있으며, OR 조건 중 하나만 만족해도 해당 값을 반환하고 WHEN~THEN 조건 탐색을 종료한다.

 

JONES(MANAGER)는 첫 번째 CASE 조건 deptno = 20 만족하기 때문에 "CASE 1"을 반환하였다.

예제쿼리(테이블포함).txt
0.00MB

 

[Oracle] 오라클 CASE WHEN 사용법 총정리

오라클에서 if 문과 비슷한 기능을 하는 DECODE 함수가 있다. 그러나 DECODE 함수는 조건이 많아지면 가독성이 떨어지고 복잡해지며, 가장 큰 문제는 오라클 SQL에서만 사용할 수 있는 비표준 함수이

gent.tistory.com

 

댓글

Designed by JB FACTORY