프로그래밍 언어/SQL

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

ShovelingLife 2024. 8. 21. 21:38

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

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

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

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 여러개 칼럼 조건 부여 (다중 칼럼)

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

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

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')

 

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

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

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

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')

 

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