캠핑과 개발


DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL안으로 끌여들여 사용하기 위하여 만들어진 오라클함수이다. 따라서 일반 프로그래밍 언어의 IF문이 수행할 수 있는 기능을 포함하고 있다. select시의 decode 사용은 from 절만 빼고 어디에서나 사용할수 있다.
단. 비교 연산은 '='만 가능하다.


문법

DECODE(expr, search, result
       [, search, result ]...
       [, default ]      )

형식은 다음과 같이 사용하시면 됩니다.

DECODE(deptname, 'A', 1, 0)

-> deptname이 'A'와 같으면 1을 갖고 아니면 0을 갖게 됩니다.

또는 SUM함수로 합계를 내줄 수 있습니다.

SUM(DECODE(deptname, 'A', 1, 0)

-> deptname이 'A'와 같으면, 1을 누적하고,아니면 0을 갖게 됩니다.

2중 DECODE문도 허용됩니다. 다음을 보도록 하겠습니다.

DECODE(deptname, 'A', DECODE(name, 'KIM', 1), 0)

-> deptname이 'A'와 같고, name이 'KIM'이면, 1을 같고, 아니면, 0을 갖는다.

2중 DECODE문을 쓸때 두개의 DECODE문은 AND연산으로 수행됨을 명심하길 바랍니다.

기타 DECODE문과 오라클내에서 쓸 수 있는 여러가지 함수를 혼용해서 쓸수 있습니다.
예를들면, 문자열을 잘라주는 SUBSTR함수라든가, 위에서 사용한 SUM함수 등을 혼용해서 쓸 수 있습니다.
이렇게 원하는 sql문을 구사하기 위해서는 많은 실습과 경험과 그리고, 시행착오가 필요합니다.
DECODE문을 사용해서 조건에 맞는 항목에 대한 연산도 가능합니다.

다음을 보도록 하겠습니다.

문제) 사원테이블(PA06MR0)에서 영문성이 'KIM'으로 시작하는 사람과 'LEE'로 시작하는 사람의 합을 구하라. 단 입사년도 가 올해(1998)인 사람의 합을 구하라.

SELECT EMPNAME,
    SUM(DECODE(SUBSTR(EMPNAME,1,3),'KIM',1,0) 
    + DECODE(SUBSTR(EMPNAME,1,3),'LEE',1,0)),
FROM PA06MR0
WHERE SUBSTR(entondate, 1, 4) = '1998';
GROUP BY EMPNAME;


MS-SQL의 경우 CASE문과 같다.

CASE A
    WHEN 'apple' THEN 1  
    WHEN 'banana' THEN 0
    WHEN 'potato' THEN 2
END

 

'DEVELOPMENT > Database' 카테고리의 다른 글

oracle 시작과 종료  (0) 2009.05.07
Toad 단축키  (0) 2009.04.18
[ORACLE] 테이블 관련 정보 쿼리  (0) 2008.07.26
[MS-SQL] SELECT INTO  (0) 2008.05.20
[oracle] 오라클 중복제거 하면서 전체 값 가져오기  (0) 2008.03.27