오늘은 오라클 함수 중에 CASE WHEN 함수에 포스팅을 해 보겠어요
CASE WHEN 구문은 아주 많이 사용되어 집니다.
코드값을 비교하여 변환이 필요할때는 DECODE만 사용해도 충분하지만 여러개의 조건별로 데이터를 가공 해야 하는 경우
CASE WHEN 함수가 아주 유용합니다.
* CASE WHEN ~ THEN END 구문
CASE WHEN 조건1 THEN 조건만족시 값1
조건과 조건만족시 결과값의 쌍이 반복되며 모든 조건이 불일치 할때는 ELSE 조건에 지정된 값을 결과로 얻어요. END 다음에 지정하는 결과컬럼명이 쿼리 결과 출력시 표시되는 컬럼명입니다. |
1. 테스트를 위해 WITH문을 사용하여 TDATA 라는 데이터를 만들어서 조회한 결과입니다.
이 데이터를 이용하여 CASE WHEN 문장을 적용해 보도록 하겠습니다.
WITH TDATA AS ( SELECT 3 AS 판매량, '미국' 국적, '핸드폰' AS 판매제품 FROM DUAL UNION ALL SELECT 15 AS 판매량, '한국' 국적, '냉장고' AS 판매제품 FROM DUAL UNION ALL SELECT 8 AS 판매량, '대만' 국적, '핸드폰' AS 판매제품 FROM DUAL UNION ALL SELECT 5 AS 판매량, '한국' 국적, '자동차' AS 판매제품 FROM DUAL )
SELECT * FROM TDATA |
|
2. 데이터중에서 고품질인 정보를 읽어보겠어요. 고품질의 조건은 국적이 한국이면 고품질입니다.
고품질여부 필드를 만드는데 국적이 한국이면 고품질, 아니면 공백으로 해서 고품질여부 항목을 만들었어요
SELECT 판매량, 국적, 판매제품 , CASE WHEN 국적 = '한국' THEN '고품질' ELSE '' END 고품질여부 FROM TDATA; |
|
3. 3가지의 정보를 구해 봤어요
1) 총판매량 : 판매량의 총 합계
2) 한국_판매량 : 국적이 한국 정보의 판매량 합계를 구합니다.
3) 한국대만_판매량 : 국적이 한국이거나 대만 정보의 판매량 합계를 구합니다.
SELECT SUM(판매량) AS 총판매량 ,SUM(CASE WHEN 국적 = '한국' THEN 판매량 ELSE 0 END) 한국_판매량 ,SUM(CASE WHEN 국적 = '한국' OR 국적='대만' THEN 판매량 ELSE 0 END) 한국대만_판매량 FROM TDATA |
|
4. 4가지의 정보를 구해 봤어요
1) 총판매량 : 판매량의 총 합계
2) 한국_판매량 : 국적이 한국 정보의 판매량 합계를 구합니다.
3) 미국_판매량 : 국적이 미국 정보의 판매량 합계를 구합니다.
4) 대만_판매량 : 국적이 대만 정보의 판매량 합계를 구합니다.
SELECT SUM(판매량) AS 총판매량 ,SUM(CASE WHEN 국적 = '한국'THEN 판매량 ELSE 0 END) 한국_판매량 ,SUM(CASE WHEN 국적 = '미국'THEN 판매량 ELSE 0 END) 미국_판매량 ,SUM(CASE WHEN 국적 = '대만'THEN 판매량 ELSE 0 END) 대만_판매량 FROM TDATA |
|
4. 판매금액
국적별로 가중치를 줘서 판매금액이라는 항목을 만들었봤어요
한국산이면 개당 10,000, 미국산은 개당 2,000, 대만산은 개당 100 으로 해서
국적, 판매량 값을 가지고 판매금액을 구했어요
SELECT |
|
'SQL > ORACLE함수' 카테고리의 다른 글
[본문스크랩] 오라클 종합 요약 (0) | 2014.06.11 |
---|---|
오라클 간단한 프로시져 CURSOR,FOR 문 사용하기 (0) | 2014.06.11 |
[DBMS비교] Oracle함수, MS-SQL함수 비교 (0) | 2014.06.11 |
MERGE INTO문 INSERT와 UPDATE를 하나의 쿼리로 (0) | 2014.06.11 |
[오라클함수] 오라클 DECODE함수 사용하기 (0) | 2014.06.11 |
[오라클함수] GROUP BY 컬럼..컬럼 사용하기 (0) | 2014.06.11 |
[오라클함수] DB LINK 연결 사용 (0) | 2014.06.11 |
[오라클함수] 오라클 행열 바꾸기(CASE WHEN, MAX함수 사용) (0) | 2014.06.11 |