⇒ DECODE와 CASE 함수는 SQL 문장에서 조건에 해당하는 값을 추출하고자 할 때 주로 사용한다.
⇒ 예제 1
-- 부서번호가 10이면 행정, 20이면 마케팅, 30이면 구매
-- 나머지는 기타를 출력하는 예제
SELECT department_id, DECODE(department_id, 10 , '행정' ,
20 , '마케팅' ,
30 , '구매',
'기타') DEPARTMENT_NAME
FROM departments;
⇒ 예제 2
-- 10부서는 급여합계를, 20부서는 최대값을, 30부서는 최소값을 출력하는 예제
SELECT department_id, DECODE(department_id, 10 , SUM(salary),
20 , MAX(salary),
30 , MIN(salary)) "연봉"
FROM employees
WHERE department_id IN (10, 20, 30)
GROUP BY department_id
ORDER BY department_id ASC;
⇒ 예제 3
-- 부서별로 급여 합계를 출력한다.
SELECT department_id, NVL(SUM(DECODE(department_id, 10, salary)),0) deptno10,
NVL(SUM(DECODE(department_id, 20, salary)),0) deptno20,
NVL(SUM(DECODE(department_id, 30, salary)),0) deptno30,
NVL(SUM(DECODE(department_id, 40, salary)),0) deptno40
FROM employees
WHERE department_id IN (10, 20, 30)
GROUP BY department_id
ORDER BY department_id ASC;
⇒ 예제 4
-- 부서별로 급여 합계를 행으로 출력한다.
SELECT d.department_id, NVL(SUM(e.salary),0) salary
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id
AND e.department_id IN (10, 20, 30)
GROUP BY d.department_id
ORDER BY department_id ASC;
⇒ 예제 5 [예제 4의 결과를 열로 변경해보기]
-- 부서별로 급여 합계를 열로 출력한다.
SELECT MAX(NVL(SUM(DECODE(department_id, 10, salary)),0)) department_id10,
MAX(NVL(SUM(DECODE(department_id, 20, salary)),0)) department_id20,
MAX(NVL(SUM(DECODE(department_id, 30, salary)),0)) department_id30,
MAX(NVL(SUM(DECODE(department_id, 40, salary)),0)) department_id40
FROM employees
GROUP BY department_id;
⇒ 예제 1
-- 위의 DECODE예제를 CASE함수로 변환한 예이다.
SELECT department_id,
CASE department_id
WHEN 10 THEN 'ACCOUNTING'
WHEN 20 THEN 'RESEARCH'
WHEN 30 THEN 'SALES'
ELSE 'OPERATIONS'
END as "Dept Name"
FROM departments
WHERE department_id IN (10, 20 , 30);
⇒ 예제 2
--급여별로 인상율을 다르게 계산하였다.
SELECT last_name
,CASE
WHEN salary < 1000 THEN salary+(salary*0.8)
WHEN salary BETWEEN 1000 AND 2000 THEN salary+(salary*0*0.5)
WHEN salary BETWEEN 2001 AND 3000 THEN salary+(salary*0.3)
ELSE salary+(salary*0.1)
END salary
FROM employees;
CASE 구문은 많이 사용해본적 있는데, DECODE는 아예 처음 본 개념이다.
DECODE는 집계나 통계에서, 반대로 CASE는 비교 연산에서 많이 사용한다는 것을 인지하여 추후 실무에서 사용해야겠다.