DECODE와 CASE 함수는 SQL 문장에서 조건에 해당하는 값을 추출하고자 할 때 주로 사용한다
아래는 DECODE 함수의 일반적인 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | -- 부서번호가 10이면 ACCOUNTING, 20이면 RESEARCH, 30이면 SALES -- 나머지는 OPERATIONS를 출력하는 예제 SELECT deptno, DECODE(deptno, 10 , 'ACCOUNTING' , 20 , 'RESEARCH' , 30 , 'SALES' , 'OPERATIONS' ) name FROM dept; DEPTNO NAME ------ ---------- 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS |
아래는 DECODE 함수에서 집계 함수를 사용한 예제이다
1 2 3 4 5 6 7 8 9 10 11 12 | -- 10부서는 급여합계를, 20부서는 최대값을, 30부서는 최소값을 출력하는 예제 SELECT deptno, DECODE(deptno, 10 , SUM (sal), 20 , MAX (sal), 30 , MIN (sal)) sal FROM emp GROUP BY deptno; DEPTNO SAL --------- -------- 30 950 20 3000 10 8750 |
DECODE함수는 집계함수와 함께 통계 데이터를 추출할 때 많이 사용한다. 아래는 부서별로 급여합계를 조회하는 예이다
1 2 3 4 5 6 7 8 9 10 11 12 13 | -- 부서별로 급여 합계를 출력한다. SELECT deptno, NVL( SUM (DECODE(deptno, 10, sal)),0) deptno10, NVL( SUM (DECODE(deptno, 20, sal)),0) deptno20, NVL( SUM (DECODE(deptno, 30, sal)),0) deptno30, NVL( SUM (DECODE(deptno, 40, sal)),0) deptno40 FROM emp GROUP BY deptno; DEPTNO DEPTNO10 DEPTNO20 DEPTNO30 DEPTNO40 ------- --------- --------- ---------- ---------- 30 0 0 9400 0 20 0 10875 0 0 10 8750 0 0 0 |
아래 부서별 급여합계 예를 보면 일반적인 집계함수를 사용할 때는 급여 합계가 행으로 조회가 되지만, DECODE와 MAX함수를 사용하면 열로 값을 표시할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | -- 부서별로 급여 합계를 행으로 출력한다. SELECT d.deptno, NVL( SUM (e.sal),0) sal FROM emp e, dept d WHERE e.deptno(+) = d.deptno GROUP BY d.deptno; DEPTNO SAL -------- ---------- 10 8750 20 10875 30 9400 40 0 -- 부서별로 급여 합계를 열로 출력한다. SELECT MAX (NVL( SUM (DECODE(deptno, 10, sal)),0)) deptno10, MAX (NVL( SUM (DECODE(deptno, 20, sal)),0)) deptno20, MAX (NVL( SUM (DECODE(deptno, 30, sal)),0)) deptno30, MAX (NVL( SUM (DECODE(deptno, 40, sal)),0)) deptno40 FROM emp GROUP BY deptno; DEPTNO10 DEPTNO20 DEPTNO30 DEPTNO40 --------- ---------- ---------- ---------- 8750 10875 9400 0 |
위의 DECODE예제를 CASE함수로 변환한 예이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | --위의 DECODE예제를 CASE함수로 변환한 예이다. SELECT deptno, CASE deptno WHEN 10 THEN 'ACCOUNTING' WHEN 20 THEN 'RESEARCH' WHEN 30 THEN 'SALES' ELSE 'OPERATIONS' END as "Dept Name" FROM dept; DEPTNO Dept Name ------- ---------- 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS |
아래는 WHEN절 다음에 연산자가 오는 예제이다.
1 2 3 4 5 6 7 8 9 | --급여별로 인상율을 다르게 계산하였다. SELECT ename , CASE WHEN sal < 1000 THEN sal+(sal*0.8) WHEN sal BETWEEN 1000 AND 2000 THEN sal+(sal*0.5) WHEN sal BETWEEN 2001 AND 3000 THEN sal+(sal*0.3) ELSE sal+(sal*0.1) END sal FROM emp; |
- 강좌 URL : http://www.gurubee.net/lecture/1028
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.