[SQL] CASE..WHEN...THEN 문
yeoseon opened this issue · comments
Yun Yeoseon (Row) commented
Where
문의 한계
Where문을 통해 조건을 설정할 수 있지만,
가져온 값에 어떤 조건을 걸어 보여주거나 값을 변환해서 가져올 필요가 있다.
이때는 CASE..WHEN..THEN
문을 사용한다.
SELECT * FROM table명 WHERE
column명<검색할 컬럼명>
CASE WHEN 'A'='B'<비교조건> THEN '2013' <처리조건>
ELSE 'C'<default 조건>
END<반드시 끝에 END를 써야한다>
사용방법 1
CASE 와 WHEN 사이에 비교하고자 하는 Column 을 넣고
WHEN 과 THEN 사이에 비교하고자 하는 값을 넣어서 비교하는 방법
SELECT CASE WHEN TO_CHAR(SYSDATE, 'YYYY') = '2013' THEN SYSDATE
WHEN TO_CHAR(SYSDATE, 'MM') = '11' THEN SYSDATE + 1
ELSE NULL END SYS_DATE
FROM DUAL;
사용방법 2
CASE 와 WHEN 사이는 비우고(컬럼없음),
WHEN 과 THEN 사이에 내가 필요한 조건문을 WHERE 절에 넣는 것처럼 넣는 방법
2번의 경우에는 하나의 조건 뿐만 아니라 여러 개의 조건을 한꺼번에 넣을 수 있다.
SELECT CASE WHEN TO_CHAR(SYSDATE, 'YYYY') = '2013' THEN SYSDATE
WHEN TO_CHAR(SYSDATE, 'MM') = '11' THEN SYSDATE + 1
ELSE NULL END SYS_DATE
FROM DUAL;
중첩 Case문
Case 문을 중첩하여 사용할 수 있다.
SELECT T1.STORE_ID
,T1.STORE_ADDR
,CASE WHEN T1.STORE_SIZE >= 100 THEN
CASE WHEN T2.REGION_GD IN ('S') THEN 'High grade'
WHEN T2.REGION_GD IN ('A','B') THEN 'Mid Grade'
ELSE 'Low Grade'
END
WHEN T1.STORE_SIZE >= 50 THEN
CASE WHEN T2.REGION_GD IN ('S', 'A') THEN 'High Grade'
WHEN T2.REGION_GD IN ('B') THEN 'Mid Grade'
ELSE 'Low Grade'
END
ELSE
CASE WHEN T2.REGION_GD IN ('S', 'A', 'B') THEN 'High Grade'
ELSE 'Low Grade'
END
END STORE_SIZE_GD
FROM SQL_TEST.MA_STORE T1
,SQL_TEST.CD_REGION T2
WHERE T1.REGION_CD = T2.REGION_CD