본문 바로가기

db/mssql

mssql case when

반응형

Microsoft SQL Server(MSSQL)의 CASE 문은 조건에 따라 다른 값을 반환하는 데 사용됩니다. 이는 프로그래밍 언어의 if-then-else 구문과 유사한 기능을 SQL에서 구현하는 방법입니다.

CASE 문의 기본 문법
CASE 문은 크게 두 가지 형태로 사용됩니다.

1. 간단한 CASE 표현식 (Simple CASE Expression)
이 형식은 하나의 열(column) 값을 여러 조건과 비교할 때 사용됩니다.

CASE input_expression
   WHEN when_expression1 THEN result_expression1
   WHEN when_expression2 THEN result_expression2
   ...
   [ELSE else_result_expression]
END
  • input_expression: 비교 대상이 되는 열 또는 값.
  • WHEN when_expression: input_expression과 비교할 값.
  • THEN result_expression: input_expression이 when_expression과 일치할 때 반환할 값.
  • ELSE: 어떤 WHEN 조건도 일치하지 않을 때 반환할 기본 값. ELSE는 선택 사항입니다. ELSE를 생략하면, 일치하는 조건이 없을 경우 NULL을 반환합니다.

예시

SELECT
    product_name,
    product_category,
    CASE product_category
        WHEN 'Electronics' THEN '전자제품'
        WHEN 'Apparel' THEN '의류'
        WHEN 'Books' THEN '도서'
        ELSE '기타'
    END AS category_korean
FROM
    products;

 

2. 검색된 CASE 표현식 (Searched CASE Expression)
이 형식은 각각의 WHEN 절에 다른 조건식을 사용할 때 유용합니다. 복잡한 논리나 여러 열에 대한 조건을 적용할 때 주로 사용됩니다.

CASE
   WHEN boolean_expression1 THEN result_expression1
   WHEN boolean_expression2 THEN result_expression2
   ...
   [ELSE else_result_expression]
END
  • WHEN boolean_expression: 참/거짓을 반환하는 조건식.
  • THEN result_expression: 조건식이 TRUE일 때 반환할 값.
  • ELSE: 어떤 WHEN 조건도 TRUE가 아닐 때 반환할 기본 값.

예시

SELECT
    employee_name,
    salary,
    CASE
        WHEN salary >= 100000 THEN '고액 연봉자'
        WHEN salary >= 50000 THEN '중간 연봉자'
        ELSE '초급 연봉자'
    END AS salary_level
FROM
    employees;

 

CASE 문의 활용
CASE 문은 단순히 값을 반환하는 것을 넘어 다양한 SQL 구문에서 활용될 수 있습니다.

  • ORDER BY 절: 정렬 순서를 동적으로 변경할 때.
ORDER BY
    CASE @sort_option
        WHEN 'name' THEN employee_name
        WHEN 'salary' THEN salary
        ELSE employee_id
    END;
  • GROUP BY 절: 특정 조건에 따라 데이터를 그룹화할 때.
  • UPDATE 문: 조건에 따라 다른 값으로 데이터를 갱신할 때.
  • SUM, COUNT 등의 집계 함수: 조건부 합계나 개수를 구할 때. 예를 들어, COUNT(CASE WHEN ... END)는 특정 조건을 만족하는 행의 개수를 셉니다.

예시: 조건부 집계

SELECT
    SUM(CASE WHEN status = 'Completed' THEN amount ELSE 0 END) AS completed_sales,
    SUM(CASE WHEN status = 'Pending' THEN amount ELSE 0 END) AS pending_sales
FROM
    orders;
반응형

'db > mssql' 카테고리의 다른 글

mssql 스키마 용량 조회  (0) 2025.04.14
mssql 테이블 사용 용량 조회  (0) 2025.04.14
mssql exec sp_spaceused table  (0) 2025.04.13
mssql 기본 키 없는 테이블 조회  (0) 2025.04.13
mssql sys.tables  (0) 2025.04.13