쿼리를 사용하다 보면 조건에 따라 필요한 데이터를 불러와야 할 때가 많다. 만약 내가 특정 조건에 따라서 새로운 값을 반환해야 한다면 MSSQL에서 CASE문을 사용해서 원하는 데이터를 만들어 낼 수 있다. 프로그래밍에서 if 문처럼 조건절에 따라서 값을 표현해 주는 방식과 유사하다...
그러면 본격적으로 CASE문에 대해 알아보자
1. CASE문을 사용해서 SELECT 하기
예를 들어 내가 점수별로 60 점 이상은 Good 60점 미만은 Bad 라고 표현할 수 있는 컬럼을 추가해 select 하고 싶다면 case문을 활용하면 된다. 아래와 같이 Item1 컬럼을 점수라고 보고 60점을 기준으로 good과 bad를 표현해 보겠다.
SELECT ID,NAME,ITEM1,
CASE WHEN ITEM1 >= 60 THEN 'good' ELSE 'bad' END AS SCORE
FROM TEST_TABLE
구문을 살펴보면 CASE 뒤에 WHEN에서 조건을 부여하고 THEN 뒤에 조건에 따른 반환 값을 넣어준다. ELSE를 통해 조건이 아닌 경우 값을 반환한다.
물론 여기서는 조건을 1개만 주었지만 2개도 줄 수 있다. 이번에는 60점 미만 30점 이상인 경우 soso라는 값을 추가해 보도록 하겠다.
SELECT ID,NAME,ITEM1,
CASE WHEN ITEM1 >= 60 THEN 'good'
WHEN ITEM1 >= 30 THEN 'soso'
ELSE 'bad' END AS SCORE
FROM TEST_TABLE
그러면 이런 식으로 결과가 나오게 된다.
2. WHERE 조건절에 CASE문 추가하기
select를 할 때 case를 적어도 되지만 where 조건절에도 사용할 수 있다. CASE를 활용해서 내가 원하는 부분만 골라서 사용할 수 있다. WHERE 조건절에 1이라는 값을 반환하면 TRUE처럼 되어 해당 부분을 보여주게 된다. 반대로 0이면 FALSE로 안 보인다. 예제 테이블을 보자
만약 위의 테이블에서 이름이 Joe인 것과 ITEM2가 50 이상인 부분을 조회하려면 이렇게 작성하면 된다.
SELECT *
FROM TEST_TABLE
WHERE CASE WHEN NAME = 'Joe' THEN 1
WHEN ITEM2 >= 50 THEN 1
ELSE 0 END = 1
그러면 이런 식으로 결과가 나오게 된다.
3. 집계함수와 사용하기
SUM, AVG 등과 같은 집계함수에서도 사용 가능하다. 내가 원하는 부분만 SUM을 하고 싶다면 SUM 함수 내에 CASE 문을 입력하면 된다.
2번 예제에서 사용하는 테이블을 그대로 가져와서 이름이 Joe인 경우 1을 더하고 Jessy인 경우 2를 더하고 나머지는 3을 더한다고 한다면 아래와 같이 구문을 입력한다.
SELECT
SUM(
CASE WHEN NAME = 'JOE' THEN 1
WHEN NAME = 'Jessy' THEN 2
ELSE 3 END) AS SUM_DATA
FROM TEST_TABLE
그러면 이렇게 원하는 조건에 따라 집계할 수 있다.
'데이터베이스 > MSSQL' 카테고리의 다른 글
[MSSQL] UNION 다루기 (0) | 2024.09.19 |
---|---|
[MSSQL] PIVOT을 사용하여 행값을 컬럼으로 바꾸기 (0) | 2024.09.01 |
[MSSQL] 데이터베이스 백업/복원하기 & 복원 에러 해결 (0) | 2024.08.20 |
[MSSQL] 여러 조건으로 UPDATE 시키기 (UPDATE SET CASE...) (0) | 2024.08.19 |
[MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기 (2) | 2024.08.12 |