'Case When'에 해당되는 글 1건

728x90

조건에 따라 값을 지정해주는 Case 문


칼럼의 값이 숫자로 되어 있는 경우 이해도가 떨어지므로 이름으로 표기하는게 좋겠다는 생각이 들 수 있다. 이때 CASE WHEN END 함수를 이용하면 된다.

Case 문의 형식은 아래와 같이 2가지로 표시할 수 있다.

칼럼에 조건을 걸어서 출력하고 싶은 글자로 표시하는 방법과 칼럼 값을 출력하고 싶은 글자로 표시하는 방법


  Case

    WHEN 조건1 THEN 출력1 

    WHEN 조건2 THEN 출력2

    ELSE 출력3

  END

  Case 칼럼명

     WHEN 값1 THEN 출력1

     WHEN 값2 THEN 출력2

     ELSE 출력3

   END


예제를 보면 이해가 빠를 것이므로 예문을 보자. 

SELECT CASE AAA WHEN '1' THEN a WHEN '2' THEN b ELSE c END FROM table_name;

설명 - AAA 칼럼의 값이 '1' 이면 a, '2' 이면 b, 둘다 아닐경우 c 를 출력


설명 : code별로 2015년 2월의 개수를 구하고자 한다. 아래처럼 조회(출력)하면 코드가 숫자로 정렬된다.

SELECT CODE,COUNT(*) AS "개수"

FROM table_name

WHERE regisdate = "201502" 

GROUP BY CODE;


설명 : 코드를 직접 값으로 지정하여 글자로 정렬되어 출력된다.

SELECT CASE CODE WHEN 1 THEN '사과' ELSE '포도' END, COUNT(*) AS "개수"

FROM table_name

WHERE regisdate = "201208"

GROUP BY CODE;



-- 조건 함수처리
SELECT empno, ename, case when sal >=0 and sal <= 1000 then 'E'
when sal > 1000 and sal <= 2000 then 'D'
when sal > 2000 and sal <= 3000 then 'C'
when sal > 3000 and sal <= 4000 then 'B'
when sal > 4000 and sal <= 5000 then 'A'
end 
FROM table_name;


조건안에 칼럼명이 들어간 경우에는 case 컬럼명 대신 case 만 적어도 인식된다.


(case when(is_finish = 0 and is_checking = 0) then role when is_checking = 1 then '완료' when is_checking = 2 then '수정' when is_checking = 3 then '검토중' else '대기' end) as is_checking

처럼 when 에 두가지 조건을 제시해서 결과 표시에는 특정 필드를 적어줄 수도 있다.

아니면 특정한 값을 계산해서 표시할 수도 있다.


오라클에서는 Decode 함수가 많이 사용된다.

-- decode 함수 : decode(A,B,'1') A가 B라면 1을 출력
select empno, ename, sal,
decode(sign(sal-4000),1,'A',
decode(sign(sal-3000),1,'B',
decode(sign(sal-2000),1,'C',
decode(sign(sal-1000),1,'D', 'E')
))) GRADE
from emp;

'SQL' 카테고리의 다른 글

[SQL] VoC 처리 SQL 및 decode 함수  (0) 2015.04.08
[MySQL] IF Select  (0) 2015.04.03
[SQL] 인덱스(Index) 설정법과 SQL 성능 튜닝  (0) 2015.02.02
[SQL] WHERE 기능, 성능향상 팁 *****  (1) 2015.02.01
MySQL 운영 문제점과 해법들  (0) 2015.01.31
블로그 이미지

Link2Me

,