본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]조건문 CASE WHEN 사용하기

by 빛과 어둠사이 2019. 3. 18.
728x90
반응형
SMALL

저는 지금까지 ORACLE과 MS SQL(SQL Server)만을 써왔어요.

이 두 DB 모두 IF문처럼 CASE WHEN 문을 제공하고 있습니다.


IF 처럼 조건에 따른 결과를 나타내는 방법이죠.

저는 보통 IF는 프로시저 만들거나 할 때 쓰고,

CASE WHEN은 SELECT문 등을 쓸 때 많이 썼어요.

이게 정답인지 아닌지는 모르겠으나

전 이렇게 썼었어요.


그리고 CASE WHEN을 사용할 경우는 크게 3가지로 나눌 수 있을거 같아요.

1. 단일 조건에 참일 경우

2. 단일 조건에 참과 거짓일 경우

3. 다중 조건의 참과 거짓일 경우

제 경험상으론 위 3가지 외에는 딱히 없었고,

3가지면 모두 커버가 가능하긴 했었어요.

보통 3번을 제일 많이 쓰긴 했죠.


아무튼 이 3가지에 대해서 각각 CASE WHEN을 사용하는 방법을

정리해볼께요~



1. 단일 조건에 참일 경우

이 때는 조건을 써서 참일 경우에만 넣으면 되요.

SELECT name , CASE WHEN name = 'all_columns' THEN 'OK' END
FROM sys.all_objects
WHERE name IN(
	'all_columns'
	, 'all_objects'
	, 'all_parameters'
)


쿼리는 이렇게 넣으면 되요.

그러면 아래처럼 결과가 나와요.

name의 값이 all_colunms일 경우에는 OK

그 외에는 NULL이 나오는 거에요.




2. 단일 조건에 참과 거짓일 경우

이 때는 1번에 ESLE만 추가를 하면 되요.

참 간단하죠.

IF문도 보통 그렇게 썼는데

똑같아요.


SELECT name, CASE WHEN name = 'all_columns' THEN 'OK' 
	ELSE 'NO' END
FROM sys.all_objects
WHERE name IN(
	'all_columns'
	, 'all_objects'
	, 'all_parameters'
)


위처럼 쿼리를 작성하면되요.

그러면 아래처럼 결과가 나와요.

name의 값이 all_colunms일 경우에는 OK

그 외의 경우에는 NO를 출력하는 거에요.




3. 다중 조건과 거짓을 경우

IF문에서도 ELSE IF문을 쓰듯이

CASE WHEN 에서도 사용할 수 있어요.


 사용은 아래처럼 하면 되요.


SELECT name, CASE WHEN name = 'all_columns' THEN 'OK' 
	WHEN name = 'all_objects' THEN 'OK2'
	ELSE 'NO' END
FROM sys.all_objects
WHERE name IN(
	'all_columns'
	, 'all_objects'
	, 'all_parameters'
)


위처럼 쿼리를 작성하게 되면 아래처럼 결과가 나옵니다.

name의 값이 all_colunms일 경우에는 OK

name의 값이 all_objects 일 경우에는 OK2

그 외의 경우에는 NO를 출력하는 겁니다.



이렇게 3가지가 제가 사용해본 CASE WHEN 사용법이였습니다.

아마 이 3가지 외에는 사용 안할거 같아요.

못할 수도 있고요~



이상으로 DB에서 사용하는 CASE WHEN문 사용법이였습니다~


728x90
반응형
LIST