오라클[sql] 조건함수 DECODE / CASE
DECODE
- DECODE : 비교연산자 =
▶ DECODE ( 조건식, 1번결과, 1번출력, 2번결과, 2번출력, 3번결과, 3번출력...,[기본값])
예제
CREATE TABLE jumin(
jumin VARCHAR2(14)
);
INSERT INTO jumin
VALUES ('111111-1234567');
SELECT * FROM jumin;
SELECT jumin
, SUBSTR(jumin, 8, 1) AS gender
, DECODE(SUBSTR(jumin, 8, 1), '1','남자','3','남자','여자') AS gender2
FROM jumin;
CASE WHEN THEN END
- CASE : 다양한 연산자로 작업
▶ CASE 조건식 WHEN 조건에대한결과1 THEN 결과1에대한 출력1
WHEN 조건에대한결과2 TEEN 결과2에대한 출력2
ELSE 그외 END as 별칭
예제
SELECT jumin
, CASE SUBSTR(jumin,8,1) WHEN '1' THEN '남자'
WHEN '3' THEN '남자'
ELSE '여자'
END AS gender
FROM jumin;
연습문제
1. 부서번호가 10이면영업부, 20이면 관리부, 30이면 IT부 그 외는 기술부로 출력
SELECT empno, ename, deptno
, DECODE(deptno, '10', '영업부', 20, '관리부', 30, 'IT부', '기술부') AS dept
, CASE deptno WHEN 10 THEN '영업부'
WHEN 20 THEN '관리부'
WHEN 30 THEN 'IT부'
ELSE '기술부'
END AS dept2
, CASE WHEN deptno=10 THEN '영업부'
WHEN deptno=20 THEN '관리부'
WHEN deptno=30 THEN 'IT부'
ELSE '기술부' END as dept3
FROM emp;
2.업무(job)이 analyst이면 급여 증가가 10%이고 clerk이면 15%, manager이면 20%인 경우 사원번호, 사원명, 업무, 급여, 증가한급여를 출력
SELECT empno, ename, job, sal
, DECODE(job, 'ANALYST', sal*1.1, 'CLERK', sal*1.15, 'MANAGER', sal*1.2, sal) AS inc_sal
, CASE job WHEN 'ANALYST' THEN sal*1.1
WHEN 'CLERK' THEN sal*1.15
WHEN 'MANAGER' THEN sal*1.2
ELSE sal
END AS inc_sal2
, CASE WHEN job = 'ANALYST' THEN sal*1.1
WHEN job = 'CLERK' THEN sal*1.15
WHEN job = 'MANAGER' THEN sal*1.2
ELSE sal END AS inc_sal3
FROM emp;