오늘은 오라클 함수 중에 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 |




