2017-12-21 3 views
0

"티켓"테이블이 있습니다.
테이블 구조 :MySQL : ASC의 일부 레코드를 정렬하는 방법과 다른 필드의 값을 기준으로 DESC 순서로 정렬하는 방법

  • 고유 ID (자동 증가)
  • 상태 (개방/폐쇄/예외)
  • 순위 (숫자, 많은 수 = 높은 우선 순위)
  • CREATION_DATE
  • 등 ...

나는 다음과 같은 순서로 티켓을 검색해야합니다

  • 먼저 티켓을 "열기", 우선 순위에 따라 분류 (높은 순), 다음 (오래된 것을 처음으로) CREATION_DATE에 의해
  • 티켓은 다음 "폐쇄" CREATION_DATE으로 분류 (최근에서 오래된 것 순으로)

이는 두 쿼리의 UNION 함께 할 수 있지만,이 많은 복잡성을 추가합니다.

단일 쿼리에서이 작업을 수행하기위한 제안이 있으십니까?

답변

4

union all을 사용하지 마십시오. order by의 복수 키 사용 :

select t.* 
from t 
where status in ('open', 'closed') 
order by (status = 'open') desc, 
     (case when status = 'open' then priority end) desc, 
     (case when status = 'open' then creation_date end) asc, 
     (case when status = 'closed' then creation_date end) desc 
+0

완료. 나는 CASE 문이 그런 식으로 사용될 수 있다는 것을 알지 못했습니다. 계몽에 감사드립니다. –

관련 문제