저는 지금까지 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문 사용법이였습니다~
'컴퓨터관련 > MS-SQL' 카테고리의 다른 글
[MS-SQL]트리거 확인하기 (0) | 2019.04.01 |
---|---|
[MS-SQL]TOP에 변수 사용하여 데이터 가져오기 (0) | 2019.03.29 |
[MS-SQL]행 일련번호 가져오기 (0) | 2019.03.21 |
[MS-SQL]SSMS 단축키 지정하기 (0) | 2019.03.20 |
[MS SQL]IF문 사용하기 (2) | 2019.03.19 |