조건에 따라 값을 지정해주는 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 |