컴퓨터/MSSQL

MSSQL ORDER BY절에 CASE문 사용하기

k1asd1 2020. 12. 8. 17:13
728x90
반응형

쿼리문의 조회된 결과 중 어떠한 칼럼에 원하는 데이터가 있을 경우 그 그 데이터들만 특정한 칼럼을 기준으로 다시 오름 차순 정렬을 해야 하는 작업이 생겼습니다.

 

사용하는 언어의 컴포넌트나 지원 요소에 따라 간단히 해결될 수도 있고 다른 방식으로도 해결이 가능하겠지만 이번에는 ORDER BY 절에 CASE 문을 사용해보기로 했습니다.

 

초보라 설명은 잘 못하지만 가끔은 쓰일 듯 하여 글로 남겨봅니다.

 


* 예제 데이터

예제

위와 같이 'members' 테이블에 데이터가 입력되어 있고 'grade' 칼럼으로 오름차순 정렬되어 있습니다. 예를 들기 위해 단순히 입력했습니다.

 

우선, 여기서 현재 조회된 정렬 상태를 유지하되 'grade' 컬럼의칼럼의 데이터 중 '65'인 항목들만 'note' 칼럼의 데이터를 오름차순으로 정렬하고자 합니다.


* 코드

SELECT *
  FROM members
 ORDER BY grade ASC, (CASE WHEN grade = 65 THEN note END) ASC, empno ASC

 

* 결과

결과

결과 이미지와 같이 'grade' 컬럼의 데이터 중 '65'인 항목들만 'note' 칼럼의 데이터를 오름차순으로 정렬하였습니다.


이를 이용하여 'grade' 칼럼의 데이터 중 '65'와 '80'인 항목들만 'note' 칼럼의 데이터를 정렬해보겠습니다.

 

* 코드

SELECT *
  FROM members
 ORDER BY grade ASC, (CASE WHEN grade = 65 THEN note 
                           WHEN grade = 80 THEN note END) ASC, empno ASC

--또는

SELECT *
  FROM members
 ORDER BY grade ASC, (CASE WHEN grade = 65 THEN note END) ASC, (CASE WHEN grade = 80 THEN note END) ASC, empno ASC

--또는

SELECT *
  FROM members
 ORDER BY grade ASC, (CASE WHEN grade IN (65, 80) THEN note END) ASC, empno ASC

 

* 결과

결과

내림차순으로 해도 되고 기타 등등 다양하게 응용 가능합니다.


※ 잘못된 부분이나 틀린 내용이 있다면 지적해주세요.

 

 

728x90
반응형