Programming/오라클[SQL]

오라클[sql] 조건함수 DECODE / CASE

콩king 2022. 8. 22. 12:20

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;