본문 바로가기
데이터베이스[DB]/MSSQL

[MS-SQL] IIF, CASE ( DECODE, CASE ) 조건문

by 낭만의개꿈 2025. 1. 15.

 

오라클의 DECODE 라는 조건문이 있는데, MS-SQL 에는 IIF 를 DECODE 처럼 이용할 수 있다. SQL Server 2012 버전부터 사용이 가능하며, CASE 문을 주로 사용하기는 하지만 두 가지 값만 리턴 받을 땐 좀 더 간단하게 작성할 수 있는 IIF 를 사용할 수 있다. IIF 와 CASE 에 대해서 확인하도록 하자.

 

TEST Table & Data Create
CREATE TABLE #tmp_data
(
	cust_id int,
	cust_name varchar(10),
	cust_job varchar(10)
)

INSERT INTO #tmp_data VALUES (1,'홍길동','학생')
INSERT INTO #tmp_data VALUES (2,'이순신','군인')
INSERT INTO #tmp_data VALUES (3,'카네기','학생')
INSERT INTO #tmp_data VALUES (4,'임꺽정','목수')

 

#tmp_temp 자료조회

 

우선, 원활한 테스트 진행을 위해 임시테이블 자료를 생성한다.

 

IIF
  • 특정 조건이 참이면 A, 거짓이면 B로 응답한다. 
-- IIF(조건식, 참, 거짓)
SELECT *, IIF(cust_job = '학생', '졸업예정', '현역')
  FROM #tmp_data

IIF 조건 조회

 

cust_job 이 학생일 경우, 졸업예정으로 아닐 경우는 현역으로 자료 조회를 진행 해 보았다. 위와 같이 IIF(조건식 , 참, 거짓 )으로 작성을 하여 조회가 가능하다. 오라클에서는 DECODE(cust_job, '학생', '졸업예정', '현역') 으로 쓰이는 것과 MS-SQL IIF 로 쓰이는 게 동일하다.

 

CASE
  • CASE 는 조건을 WHEN 구에 사용하며, 해당 조건이 참이면 THEN 이 실행되고 거짓이면 ELSE 가 응답된다. 
SELECT *,
	  CASE WHEN cust_job = '학생' AND cust_name = '홍길동' THEN '졸업예정' 
		   WHEN cust_job = '학생' THEN '재학생'
		   ELSE '졸업생' END 
  FROM #tmp_data

case 문 조회

 

위와 같이 CASE 문은 여러가지의 조건을 추가하며, 해당 조건에 따른 여러가지 케이스에 따른 결과를 조회할 수 있다.

 

1. cust_job 이 학생이면서 이름이 홍길동이라면 졸업예정

2. cust_job 이 학생이면 재학생

3. 그 외 졸업생

우린 아래와 같은 여러 조건을 걸어 자료를 추출하였고, case 문은 순차적으로 처리됨에 따라 홍길동인 학생은 졸업예정으로 표기되고, 나머지 학생들은 모두 재학생, 그 외의 인물들은 졸업생으로 표기할 수 있다.