DB 중심 아키텍쳐 환경에서 조건에 따라 분기를 주기 위해선 CASE WHEN 사용이 필수적입니다.
사실 DB 중심 아키텍쳐하면 할 말이 많습니다만...이번 주제가 아니니 넘어가기로 하고 쿼리문에서 조건에 따른 분기문을 어떻게 주는지 살펴봅시다.
문법은 다음과 같습니다.
-- SELECT절
SELECT CASE
WHEN {조건문} THEN {리턴값}
WHEN {조건문} THEN {리턴값}
...
ELSE {리턴값} END AS {별칭}
FROM TABLE
-- ORDER BY절
SELECT * FROM TABLE
ORDER BY CASE
WHEN {조건문} THEN {순서값}
WHEN {조건문} THEN {순서값}
...
ELSE {순서값} END
ORDER BY절도 적었지만 오름차순과 내림차순을 설정할 수 없고 특정한 상황에서만 쓰이기에 자주 사용되지는 않습니다. 공식 문서에는 ASC/DESC 예제가 있지만 어떤 문제 때문인지 구현이 되질 않더라구요.
사실상 가장 많이 사용되는 것은 SELECT절입니다.
실사용 예제를 보겠습니다.
-- SELECT절
SELECT CASE
WHEN AMOUNT > 1 THEN 'SALE'
WHEN AMOUNT = 0 THEN 'ORDER'
ELSE 'ERROR' END AS STATUS
FROM BOOK -- 책 재고가 1 이상이면 판매, 0이면 주문, 나머지는 에러 출력
-- ORDER BY절
SELECT * FROM EVENT
ORDER BY PLAN
WHEN TYPE = 'ING' THEN 1
WHEN TYPE = 'END' THEN 2
ELSE 3 END -- 진행 중인 계흭, 그 다음 끝난 계흭, 나머지 계흭 순으로 출력
위에서 보다시피 CASE 문은 그 길이가 매우 길어 가독성을 떨어뜨리는 주범입니다.
이지선다일 때는 IFF 문법을 사용할 수 있는데 CASE WHEN과 비교하면 매우 가독성이 좋은 편입니다. 상황이 된다면 IFF을 사용하길 권장합니다.
-- 문법
SELECT
IIF( {조건문}, {조건에 해당하는 리턴값}, {조건에 해당하지 않는 리턴값}) AS {별칭}
FROM TABLE
-- 실사용 예제
SELECT IIF(SEX_CODE = 1, '남자', '여자') FROM USER --성별코드가 1이면 남자, 그 외엔 여자 출력
'DB > SQL' 카테고리의 다른 글
CTE (0) | 2022.03.12 |
---|---|
PIVOT~FOR (0) | 2022.03.01 |
STRING_AGG와 STUFF~FOR XML PATH (0) | 2022.02.27 |
EXISTS (0) | 2022.02.27 |
ISNULL (0) | 2022.02.27 |