2008년 2월 3일 일요일

ORACLE - DECODE TIP

decode 문은 일반적으로 값을 치환하는데 쓰입니다.

* 컬럼 1개를 여러개의 값으로 비교할경우..
col1 의 값이 1,2,3 인경우 각각 'ONE', 'TWO', 'THREE' 로 변환하고자 한다면,

decode(col1, 1, 'ONE', 2, 'TWO', 3, 'THREE', 'MANY')

1,2,3 이 아닌경우는 'MANY' 가 되겠죠...

* 컬럼 여러개를 한개의 값으로 비교할경우
decode(2, col1, 'col1 is TWO', col2, 'col2 is TWO', null)


* 단방향 범위를 비교하는경우
만약 25 보다 큰경우엔 25 만 리턴하고 작은경우엔 해당컬럼의 값을
리턴하고자 한다면,
decode(sign(col1-25), -1, col1, 25)

처럼 사용하면 되겠죠.

* 다차원 통계에 응용(group by 와 조합)
그룹 아이디별로 합산하는 쿼리는 일반적으로 아래와같습니다.

select grp_id, sum(score)
from GRP_SCORE_TB
group by grp_id

만약..그룹별로 총계를 내고, 그룹별 총계 합산한 총합산을 내고싶다면?
다음과같이 카티션 곱을 응용하고, decode로 선택적인 그룹핑을 해주시면
됩니다.

select MAX(decode(gubun, 1, grp_id, '총계')),
sum(score)
from GRP_SCORE_TB
cross join (select level as gubun from dual connect by level < 3)
group by gubun, decode(gubun, 1, grp_id, null)


이려면,

a001 200
a004 122
a003 27
총계 347

과 같은 결과를 낼수 있습니다.

※ 몇가지 예로 decode 의 활용을 알아보았습니다. 이외에도 order by 등에도
사용하면, 위의 group by 에 사용한것처럼, 선택적인 sorting 이 이루어지게
이용될수도 있습니다.

댓글 없음: