- DECODE문 : 자바문법으로 따지면 IF ~ ELSE IF ~ ELSE 와 같은 구조
- DECODE 함수는 조건에 따라 데이터를 다른 값이나 컬럼값으로 추출 할 수 있다.
- DECODE(VALUE, IF1, THEN1, IF2, THEN2...) 형태로 사용 할 수 있다.
- VALUE 값이 IF1일 경우에 THEN1 값을 반환하고, VALUE 값이 IF2일 경우에는 THEN2 값을 반환한다.
- DECODE 함수 안에 DECODE함수를 중첩으로 사용 할 수 있다.
- 구문
DECODE({column | expression}, search1, result1 [,search2,result2] ...
[,default] )
: column 값이 search1 이면, result1 출력, 아니면 default 출력
- 예제
아래는 DECODE 함수의 일반적인 예제이다.
-- 부서번호가 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 함수에서 집계 함수를 사용한 예제이다
-- 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함수는 집계함수와 함께 통계 데이터를 추출할 때 많이 사용한다. 아래는 부서별로 급여합계를 조회하는 예이다
-- 부서별로 급여 합계를 출력한다.
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함수를 사용하면 열로 값을 표시할 수 있다.
-- 부서별로 급여 합계를 행으로 출력한다.
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'공부 > ORACLE_SQL' 카테고리의 다른 글
| ORACLE_[ 집계함수(Aggregate function) ] (0) | 2013.05.20 |
|---|---|
| ORACLE_[ OUTER JOIN ] (0) | 2013.05.20 |
| ORACLE_[ JOIN ] (2) | 2013.05.20 |
| ORACLE_[CREATE TABLE] (0) | 2013.01.09 |
| ORACLE_[CASE문 사용법] (0) | 2012.10.05 |