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

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

 

MSSQL IIF 함수

 

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

 

 

 

[MSSQL] CASE WHEN 표현식 사용법 (DECODE, IF)

SQL Server에서는 조건에 따라 서로 다른 값을 반환할 수 있는 CASE 표현식을 사용할 수 있다. 프로그래밍 언어에서 if 문과 비슷하다고 생각하면 된다. 오라클의 DECODE 함수와 비슷한 기능을 하며, CAS

gent.tistory.com

 

 

댓글

Designed by JB FACTORY