관리 메뉴

JIE0025

[MSSQL] CASE 표현식 본문

Application/Database

[MSSQL] CASE 표현식

Kangjieun11 2021. 4. 14. 14:57
728x90

사전지식

Statement (문) : Action 명령어 , ~을 하라

Expression (식, 표현식) : 값을 반환하는 

 

Statement 명령문 Expression 표현식
SELECT a, b,c
FROM dbo.temp

temp에서 a,b,c 컬럼값을 조회 하라
명령어
WHERE custid > 0

반드시 어떤 값이 반환이 되어야만 한다. 
custid 가 0보다 큰지에 대해
TRUE, FALSE, NULL 셋중 하나 무조건 반환
스칼라 값(단일 값)으로 반환

 

CASE 표현식

CASE는 조건논리를 기반으로 값을 출력하는 스칼라 표현식

CASE는 표현식(Expression)이지 구문(Statement) 가 아니다.

 

CASE 표현식의 종류

- 단순형 (CASE다음에 column있음, WHEN 다음에 값)

- 검색형 (CASE다음에 column없음, WHEN 다음에 조건식)

 

CASE 사용방법

 

1) 단순형 CASE

 

SELECT productid, productname

CASE 컬럼

  WHEN 조건값1 THEN 반환값1

  WHEN 조건값2 THEN 반환값2

  ELSE 그외반환값
END AS 결과 별칭 

FROM Production.Product;

- 컬럼의 값이 조건값1일경우 결과별칭에 반환값1이 반환된다.

- 컬럼값이 조건값에 없는경우 즉, 나머지를 ELSE로 보내서 그외반환값을 반환한다.

 

- 반드시 CASE는 END로 끝내주어야한다. 

 

 

<예제>

SELECT productid, productname, categoryid,
  CASE categoryid
    WHEN 1 THEN 'Beverages'
    WHEN 2 THEN 'Condiments'
    WHEN 3 THEN 'Confections'
    WHEN 4 THEN 'Dairy Products'
    WHEN 5 THEN 'Grains/Cereals'
    WHEN 6 THEN 'Meat/Poultry'
    WHEN 7 THEN 'Produce'
    WHEN 8 THEN 'Seafood'
    ELSE 'Unknown Category'
  END AS categoryname
FROM Production.Products;

 

참고

SELECT 에 있는 column인 productid, productname, categoryid

CASE문같은 레벨 (동급) 이다. 

그래서 결과 표에 나란히 나온 것 이다.

 

 

 

2) 검색형 CASE

단순형은 단일값에 대한 값이 출력되었다면,

검색형은 값의 범위에 따라 반환값을 정의한다.

 

SELECT orderid, custid, val,

  CASE 
    WHEN 조건식1                   THEN 값1
    WHEN 조건식2                   THEN 값2

    ELSE 그외반환값
  END AS 결과 별칭

FROM Sales.OrderValues;

 

 

<예제>

SELECT orderid, custid, val,
  CASE 
    WHEN val < 1000.00                   THEN 'Less than 1000'
    WHEN val BETWEEN 1000.00 AND 3000.00 THEN 'Between 1000 and 3000'
    WHEN val > 3000.00                   THEN 'More than 3000'
    ELSE 'Unknown'
  END AS valuecategory
FROM Sales.OrderValues;