[SQLP] 'DECODE' 의 모든 것
DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다.
DECODE 함수는 프로그래밍에서의 if else 와 비슷한 기능을 수행한다. 간단한 사용방법은 아래와 같다.
아래와 같이 두가지 방법으로 사용이 가능하다.
1. DECODE(컬럼,조건,TRUE 결과값,FALSE 결과값)
2. DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3..........)
예시)
WITH TEMP AS (
SELECT 'M' GENDER FROM DUAL UNION ALL SELECT 'F' GENDER FROM DUAL UNION ALL SELECT 'X' GENDER FROM DUAL ) SELECT GENDER , DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') GENDER2 FROM TEMP
SELECT GENDER , DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') GENDER2 FROM TEMP
특징)
ELSE 부분은 생략이 가능하다. 해당 조건이 없으면 NULL
SELECT GENDER, DECODE(HOBBY, '롤', '준우', '카트라이더', '준우') CUSTOMS
FROM TEMP
HOBBY 가 롤이면 준우, 카트라이더면 준우를 출력하고 이외의 경우 (즉, ELSE일 경우) 는 NULL 을 출력한다.
NVL2 함수처럼 NULL 을 체크할 수 있음
SELECT CUST_NO, CUST_NM, DECODE(CUST_NO, NULL, 'N', 'Y')
이렇게 쓸 수 있음.
이 방법은 DECODE(COLUMN,'조건',같을때,다를때) 이고,
다른 형식은 DECODE(HOBBY, '롤', '준우', '카트라이더', '준우') 이거임
DECODE 함수 내부에 또 다른 DECODE 함수를 사용할 수 있음
그런데 퍼포먼스에 좋지 않다고 했음 → CASE WHEN 사용할 것.
GROUP BY 로 칼럼을 묶고 DECODE를 사용할 때 조건 대상과 타입은 항상 같아야 한다.
집계와 이중으로 사용이 가능하다.
예시)
천
준
우 (세로버전)
(가로버전)
천 준 우 와 같이 출력할 때,
SELECT MAX(DECODE(ROWNUM,A.TT
FROM
(SELECT TRIM(SUBSTR('천준우',LEVEL,1)) TT
FROM DUAL
CONNECT BY LEVEL <= 3) A
아 까먹음 .. 내일 해보기