[MSSQL] CASE 표현식
사전지식
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 그외반환값 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,
|
<예제>
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; |