MSSQL IIF, CHOOSE 논리 함수 사용법 – CASE 식 비교
Microsoft SQL Server 2012 버전부터 IIF, CHOOSE 논리 함수가 추가되었습니다. IIF, CHOOSE 논리 함수를 사용하는 것이 CASE 문을 사용하는 것보다 좀 더 효율적인 경우가 있습니다. 쿼리문에 따라서 IIF, CHOOSE 논리 함수 또는 CASE 식을 사용하면 될 것 같습니다.
그럼 예제로 CASE 식을 비교하면서 IIF, CHOOSE 논리 함수 사용법에 대해서 알아보죠.
◎ 포스트 기준 – Microsoft SQL Server 2019, SSMS 18.11
1. IIF 논리 함수
1. 함수 구문 (마이크로소프트 문서)
▶ SQL Server에서 부울 식이 True인지 False인지에 따라 두 값 중 하나를 반환합니다.
IIF( boolean_expression, true_value, false_value )
2. 사용 예제 1)
▶ True인지 False 인지 두 값 중 하나만 반환이 필요할 때는 CASE 식 보다는 IIF 함수를 사용하는 게 조금 더 효율적입니다.
-- IIF 함수가 더 직관적
SELECT IIF(GENDER = '1', '남', '여') AS 'IIF',
(CASE WHEN GENDER = '1' THEN '남' ELSE '여' END) AS 'CASE'
FROM BS_DEMO_9
WHERE P_ID < '1008'
![사용 예제 1)](https://bluesharehub.com/wp-content/uploads/2022/05/img_1-26.png)
![사용 예제 1)](https://bluesharehub.com/wp-content/uploads/2022/05/img_1-26.png)
3. 사용 예제 2) 중첩 IIF
▶ 예제와 같이 중첩 IIF 함수를 사용하는 것보다는 CASE 식이 좀 더 직관적인 것 같습니다.
-- CASE 식이 더 직관적
SELECT IIF(GENDER = '1', '남', IIF(GENDER = '2', '여', '')) AS '중첩 IIF',
(CASE GENDER WHEN '1' THEN '남' WHEN '2' THEN '여' ELSE '' END) AS 'CASE'
FROM BS_DEMO_9
WHERE P_ID < '1008'
![사용 예제 2) 중첩 IIF](https://bluesharehub.com/wp-content/uploads/2022/05/img_2-24.png)
![사용 예제 2) 중첩 IIF](https://bluesharehub.com/wp-content/uploads/2022/05/img_2-24.png)
4. 사용 예제 3) 중첩 IIF
▶ 예제와 같이 중첩 IIF 함수를 사용하는 것보다는 CASE 식이 좀 더 직관적인 것 같습니다.
-- CASE 식이 더 직관적
SELECT IIF(SCORE >= 90, 'A+',
IIF(SCORE >= 80 AND SCORE < 90, 'A',
IIF(SCORE >= 70 AND SCORE < 80, 'B', 'F'))) AS '중첩 IIF',
(CASE WHEN SCORE >= 90 THEN 'A+'
WHEN SCORE >= 80 AND SCORE < 90 THEN 'A'
WHEN SCORE >= 70 AND SCORE < 80 THEN 'B'
ELSE 'F'
END) AS 'CASE'
FROM BS_DEMO_8_3
![사용 예제 3) 중첩 IIF](https://bluesharehub.com/wp-content/uploads/2022/05/img_3-24.png)
![사용 예제 3) 중첩 IIF](https://bluesharehub.com/wp-content/uploads/2022/05/img_3-24.png)
2. CHOOSE 논리 함수
1. 함수 구문 (마이크로소프트 문서)
▶ SQL Server의 값 목록에서 지정된 인덱스에 있는 항목을 반환합니다.
CHOOSE ( index, val_1, val_2 [, val_n ] )
2. 사용 예제 1)
-- CHOOSE 논리 함수 사용법
SELECT CHOOSE(1, '첫번째', '두번째', '세번째') AS Result1,
CHOOSE(2, '첫번째', '두번째', '세번째') AS Result2,
CHOOSE(3, '첫번째', '두번째', '세번째') AS Result3,
CHOOSE(4, '첫번째', '두번째', '세번째') AS Result4
![사용 예제 1)](https://bluesharehub.com/wp-content/uploads/2022/05/img_4-18.png)
![사용 예제 1)](https://bluesharehub.com/wp-content/uploads/2022/05/img_4-18.png)
3. 사용 예제 2)
▶ 예제와 같은 경우는 CASE 식을 사용하는 것보다는 CHOOSE 함수를 사용하는 게 좀 더 직관적입니다.
-- CHOOSE 함수가 더 직관적
SELECT (CHOOSE (DATEPART(WEEKDAY, '2022-05-22'),
'일', '월', '화', '수', '목', '금', '토')) AS 'CHOOSE',
(CASE DATEPART(WEEKDAY, '2022-05-22')
WHEN 1 THEN '일'
WHEN 2 THEN '월'
WHEN 3 THEN '화'
WHEN 4 THEN '수'
WHEN 5 THEN '목'
WHEN 6 THEN '금'
WHEN 7 THEN '토' END) AS 'CASE'
![CHOOSE 논리 함수 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/05/img_5-13.png)
![CHOOSE 논리 함수 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/05/img_5-13.png)
이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!