일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프록시 예제
- MSSQL 문자열
- Visual Studio 2015 설치
- 웹 크롤링
- Vue.config
- Vue3 configureWebpack
- 디자인 패턴 사례
- Nginx Reverse Proxy
- Vue configureWebpack
- vue.js
- Selenium 설치
- Tomcat Error
- javascript
- MSSQL 동적 쿼리
- Selenium 환경
- tomcat
- .NET Core
- Visual Studio 재설치
- vue3
- Visual Studio 패키지에 실패했습니다.
- Visual Studio 2015 삭제
- 업무 자동화
- spring
- .NET Core Proxy
- 리버스 프록시 예제
- 웹 자동화
- Visual Studio 강제 삭제
- vue
- Visual Studio 2015 강제 삭제
- SQLP
- Today
- Total
금백조의 개발 블로그
[MSSQL]SELECT, WHERE, ORDER BY절에서 CASE문 활용하기(SELECT CASE, WHERE CASE, ORDER BY CASE) 본문
[MSSQL]SELECT, WHERE, ORDER BY절에서 CASE문 활용하기(SELECT CASE, WHERE CASE, ORDER BY CASE)
금백조 2021. 3. 28. 10:32서론
개발을 진행하면서 SELECT, WHERE, ORDER BY절에서 CASE문을 통해 원하는 데이터를 추출했던 경험들이 있었습니다. 오늘은 그동안 사용해봤던 경험들을 토대로 SELECT, WHERE, ORDER BY절에서 CASE문을 활용하는 방법을 예제를 통해 소개해보겠습니다.
본론
[구문 형식]
[SELECT CASE]
SELECT CASE WHEN [조건식1] THEN [결과식1]
WHEN [조건식2] THEN [결과식2]
...
ELSE [조건식N] END
[WHERE CASE]
SELECT ...
FROM ...
WHERE CASE WHEN [조건식1] THEN 1
WHEN [조건식2] THEN 1
...
ELSE 0 END = 1
[ORDER BY CASE]
SELECT ...
FROM ...
WHERE ...
ORDER BY CASE [삽입식] WHEN [조건식1] THEN [결과식1]
WHEN [조건식2] THEN [결과식2]
...
ELSE [결과식N] END
[특징]
[SELECT CASE] : WHEN에 적은 조건식에 따라 결과식을 다르게 조회할 수 있습니다.
[WHERE CASE] : 다중 조건식을 써야 할 경우 CASE문을 통해 간결하고 직관적으로 표현이 가능합니다.
[ORDER BY CASE] : 특정 행에 대해서 정렬이 따로 필요할 경우 CASE문을 통해 구현할 수 있습니다.
[SELECT CASE 예제]
--SELECT절에서 CASE문 활용 예제
SELECT N'C001' AS CLASS_CODE, N'알고리즘' AS CLASS_NAME, 100 AS SCORE
INTO #TEMP_TABLE
UNION ALL
SELECT N'C002' AS CLASS_CODE, N'자료구조' AS CLASS_NAME, 80 AS SCORE
UNION ALL
SELECT N'C003' AS CLASS_CODE, N'JAVA' AS CLASS_NAME, 60 AS SCORE
UNION ALL
SELECT N'C004' AS CLASS_CODE, N'C#' AS CLASS_NAME, 40 AS SCORE
UNION ALL
SELECT N'C005' AS CLASS_CODE, N'데이터베이스' AS CLASS_NAME, 20 AS SCORE
UNION ALL
SELECT N'C006' AS CLASS_CODE, N'네트워크' AS CLASS_NAME, 0 AS SCORE
UNION ALL
SELECT N'C007' AS CLASS_CODE, N'운영체제' AS CLASS_NAME, 99999 AS SCORE
--SELECT절에서 CASE문 활용
--조건식을 통해 각각의 학점(GRADE) 출력
SELECT
CLASS_CODE,
CLASS_NAME,
SCORE,
CASE WHEN SCORE > 100 OR SCORE < 0 THEN 'Z'--100초과 0미만인 에러 데이터는 Z 표시
WHEN SCORE >= 80 AND SCORE <= 100 THEN 'A'--80이상 100이하 = A
WHEN SCORE >= 60 AND SCORE < 80 THEN 'B'--60이상 80미만 = B
WHEN SCORE >= 40 AND SCORE < 60 THEN 'C'--40이상 60미만 = C
WHEN SCORE >= 20 AND SCORE < 40 THEN 'D'--20이상 40미만 = D
ELSE 'F' END AS GRADE--0이상 20미만 = F
FROM #TEMP_TABLE
[WHERE CASE 예제]
--WHERE절에서 CASE문 활용 예제
SELECT '과자' AS ITEM_GROUP ,N'단맛과자' AS ITEM, 100 AS SALES_QTY
INTO #TEMP_TABLE
UNION ALL
SELECT '과자' AS ITEM_GROUP ,N'쓴맛과자' AS ITEM, 10 AS SALES_QTY
UNION ALL
SELECT '과자' AS ITEM_GROUP ,N'짠맛과자' AS ITEM, 50 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'커피' AS ITEM, 150 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'우유' AS ITEM, 200 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'이온음료' AS ITEM, 300 AS SALES_QTY
--WHERE절에서 CASE문을 활용
--과자는 판매수량이 50이상이고 음료는 판매수량이 300이상인 데이터 추출
SELECT
ITEM_GROUP
,ITEM
,SALES_QTY
FROM #TEMP_TABLE
WHERE
CASE WHEN ITEM_GROUP = '과자' AND SALES_QTY >= 50 THEN 1
WHEN ITEM_GROUP = '음료' AND SALES_QTY >= 300 THEN 1
ELSE 0 END = 1
--아래의 OR 구문과 동일하게 동작
--(ITEM_GROUP = '과자' AND SALES_QTY >= 50)
--OR (ITEM_GROUP = '음료' AND SALES_QTY >= 300)
[ORDER BY CASE 예제]
--ORDER BY절에서 CASE문 활용 예제
SELECT '과자' AS ITEM_GROUP ,N'단맛과자' AS ITEM, 100 AS SALES_QTY
INTO #TEMP_TABLE
UNION ALL
SELECT '과자' AS ITEM_GROUP ,N'쓴맛과자' AS ITEM, 10 AS SALES_QTY
UNION ALL
SELECT '과자' AS ITEM_GROUP ,N'짠맛과자' AS ITEM, 50 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'커피' AS ITEM, 150 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'우유' AS ITEM, 200 AS SALES_QTY
UNION ALL
SELECT '음료' AS ITEM_GROUP ,N'이온음료' AS ITEM, 300 AS SALES_QTY
SELECT
CASE WHEN GROUPING(ITEM_GROUP)+GROUPING(ITEM)=2 THEN '총계'
WHEN GROUPING(ITEM_GROUP)+GROUPING(ITEM)=1 THEN ITEM_GROUP+'소계'
ELSE ITEM_GROUP END AS ITEM_GROUP
,ITEM
,SUM(SALES_QTY) AS SALES_QTY
FROM #TEMP_TABLE
GROUP BY ROLLUP (ITEM_GROUP, ITEM)
--ORDER BY절에서 CASE문 활용
--총계를 맨 위에 정렬되도록 출력
ORDER BY CASE GROUPING(ITEM_GROUP)+GROUPING(ITEM) WHEN 2 THEN '' ELSE 'Z' END, ITEM_GROUP
결론
CASE문은 SELECT, WHERE, ORDER BY절뿐만 아니라 SQL 모든 구문에서 활용할 수 있습니다. 따라서 CASE문에 대해 더 다양한 활용법을 알고 싶으신 분들은 아래의 [CASE(Transact-SQL)] 글에서 더욱 다양한 예제를 만나보실 수 있습니다.
Reference
[CASE(Transact-SQL)]
docs.microsoft.com/ko-kr/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15
CASE(Transact-SQL) - SQL Server
CASE 식의 Transact-SQL 참조입니다. CASE는 조건 목록을 평가하여 특정 결과를 반환합니다.
docs.microsoft.com
'Database > SQL Server(MSSQL)' 카테고리의 다른 글
[MSSQL]CROSS APPLY, OUTER APPLY 활용 및 예제(APPLY 연산자) (6) | 2021.03.31 |
---|---|
[MSSQL]EXCEPT를 이용한 차집합 구하기(MSSQL 차집합) (0) | 2021.03.30 |
[MSSQL]ISNUMERIC을 이용한 숫자, 문자 판단 및 주의사항 (0) | 2021.03.14 |
[MSSQL]SELECT INTO문을 통한 임시테이블 생성(SELECT INTO절) (0) | 2021.03.04 |
[MSSQL]PIVOT을 이용하여 세로를 가로로 변환 방법(행 열 변환) (4) | 2021.02.28 |