Web develop/SQL

[SQL/ORACLE] CASE 함수 사용예제 (Simple / Searched)

ForA 2019. 5. 29. 17:24
728x90
CASE WHEN 조건식1 THEN 결과데이터1
	WHEN 조건식2 THEN 결과데이터2
		WHEN 조건식3 THEN 결과데이터3
			ELSE 결과데이터
END

SELECT empno, ename, deptno, 
    CASE WHEN deptno=10 THEN 'ACCOUNTING'
             WHEN deptno=20 THEN 'RESEARCH'
             WHEN deptno=30 THEN 'SALES'
             ELSE 'OPERATIONS' 
    END 부서명,
    CASE WHEN mod(empno,2)=0 THEN '짝수'
             WHEN mod(empno,2)=1 THEN '홀수'
    END 사원번호 FROM emp;

Simple case expression

SELECT t.id, CASE t.color WHEN 1 THEN 'RED'
                                    WHEN 2 THEN 'BLUE'
                                  WHEN 3 THEN 'GREEN'
                                    ELSE 'NoColor' END AS Color
FROM test t;

Searched case expression

SELECT t.id, CASE WHEN t.color= 1 THEN 'RED'
                                    WHEN t.color= 2 THEN 'BLUE'
                                  WHEN t.color= 3 THEN 'GREEN'
                                    ELSE 'NoColor' END AS Color
FROM test t;

- 색상이 있는 것 또는 색상이 없는 것으로 보길 원한다면 

*Searched Case문 사용시
SELECT t.id, CASE WHEN t.color IS NULL THEN 'No Color' ELSE 'Colored' END IsColred
FROM test t;

*Simple Case문 사용시
--> 단순 케이스문에서는 컬럼값과 WHEN값을 비교연산하기에 NULL과는 연산이 불가능하여 무조건 ELSE값만 나오게된다.
SELECT t.id, CASE t.color WHEN NULL THEN 'No Color' ELSE 'Colored' END IsColred
FROM test t;

--> 따라서 Simple case문에서 사용할방법. NVL, ISNULL 사용
SELECT t.id, CASE NVL(t.color,-10) WHEN -10 THEN 'No Color' ELSE 'Colored' END IsColred
FROM test t;

SELECT t.id, CASE ISNULL(t.color,-10) WHEN -10 THEN 'No Color' ELSE 'Colored' END IsColred
FROM test t;