본문 바로가기
  • [성공하는 개발자] - Developer
DataBase/MSSQL

[MSSQL] IIF 함수 사용법 (CASE, DECODE)

by 세인보이 2022. 4. 15.
728x90

 

SQL Server 2012 버전부터 IIF 함수가 추가되었다. CASE 문을 사용하면 쿼리문이 조금 복잡해지는 부분이 있는데 2가지의 값만 리턴이 필요하다면 IIF 함수가 조금 더 효율적일 수 있다. 오라클의 DECODE 함수처럼 조금 함축적으로 쿼리문을 작성할 수 있지만 MSSQL에 종속된 함수이다.

 

 

IIF 함수는 참과 거짓 두 경우의 값만 리턴이 가능하다.

 

DECLARE @score INT = 80

SELECT IIF(@score >= 70, '합격', '불합격') AS score

 

 

 

더 많은 조건식을 사용하기 위해서는 CASE 문을 사용해야 한다.

 

IS NULL 등 다양한 조건식이 사용가능 하다.

 

DECLARE @score INT = NULL

SELECT IIF(@score IS NULL, '미입력', '입력완료') AS input

IIF 함수는 중첩 사용이 가능하다. 그러나 중첩 사용은 쿼리문이 복잡해지기 때문에 추천하지 않는다.

이런 경우에는 CASE 문을 사용할 것을 권장한다.

 

DECLARE @score INT = 69

SELECT IIF(@score >= 70, '합격', 
              IIF(@score < 70 AND @score > 60, '합격보류', '불합격')
       ) AS pass

 

통계 쿼리문 작성할 때도 유용하게 사용할 수 있다.

 

SELECT SUM(IIF(MONTH(hiredate) = 1, 1, 0))  AS [01월]
     , SUM(IIF(MONTH(hiredate) = 2, 1, 0))  AS [02월]
     , SUM(IIF(MONTH(hiredate) = 3, 1, 0))  AS [03월]
     , SUM(IIF(MONTH(hiredate) = 4, 1, 0))  AS [04월]
     , SUM(IIF(MONTH(hiredate) = 5, 1, 0))  AS [05월]
     , SUM(IIF(MONTH(hiredate) = 6, 1, 0))  AS [06월]
     , SUM(IIF(MONTH(hiredate) = 7, 1, 0))  AS [07월]
     , SUM(IIF(MONTH(hiredate) = 8, 1, 0))  AS [08월]
     , SUM(IIF(MONTH(hiredate) = 9, 1, 0))  AS [09월]
     , SUM(IIF(MONTH(hiredate) = 10, 1, 0)) AS [10월]
     , SUM(IIF(MONTH(hiredate) = 11, 1, 0)) AS [11월]
     , SUM(IIF(MONTH(hiredate) = 12, 1, 0)) AS [12월]
  FROM emp

 

 

참고 : https://gent.tistory.com/374?category=874679

728x90