SELECT MAX (DECODE (activity_item, 110, activity_item, 0) ) t1,
MAX (DECODE (activity_item, 210, activity_item, 0) ) t2,
MAX (DECODE (activity_item, 220, activity_item, 0) ) t3,
MAX (DECODE (activity_item, 230, activity_item, 0) ) t4
FROM TB_EV_ACTIVITY
GROUP BY mem_id, idea_num
해당 mem_id 참여자와, idea_num 아이디어로 중복을 제거한뒤
decode 함수로 해당 테이블의 activity_item이 110일때만 뽑고 나머진 0 으로 나오기때문에
그중 최고치인(max) 110을 제외한 나머지 행을 중복 거른다
결국 한 사람 과 한 아이디어에 관해 (group by) 110, 210 혹은 210, 220, 230 처럼
열 데이터를 행으로 뿌려준다
아래 출처 : http://www.gurubee.net/lecture/1028
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 |
'Database > Oracle' 카테고리의 다른 글
| [ Listener Error ] 64bit toad for oracle ora-12514 (0) | 2016.06.11 |
|---|---|
| [toad] toad 특문 파라미터 값으로 넣기 (0) | 2016.02.19 |
| 오라클에 존재하는 Object 관리 Table (0) | 2015.08.25 |
| [Trigger] Mutating Error 및 해결책 (0) | 2015.08.24 |
| [권한] 오라클 함수 권한 주기 / 함수삭제하기 (0) | 2015.06.25 |