문제

케이스 블록을 사용하여 SQL 2008 쿼리를 주문하는 방법을 선택해야합니다. [status] ASC, [date] DESC 아니면 그냥 [date] DESC.

하나의 열을 사용하는 방법 만 알고 있습니다.

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0
        THEN R.[date] END DESC,
    CASE WHEN @flag = 1
        THEN R.[status] END ASC

두 번째 경우 두 열을 사용하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

  • 깃발이 0이면 (null, r.date desc)로 주문할 것입니다.
  • 그렇지 않다면 (R.Status, R.Date Desc)에 의해 주문할 것입니다.

사례 표현식을 사용하여 주문을위한 새로운 값을 "프로젝트"하십시오.

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc

다른 팁

일반적으로 조건부 주문을 입력하려면 사례 명령문을 반복합니다.

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0 THEN R.[date] END DESC,
    CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
    CASE WHEN @flag = 1 THEN R.[status] END ASC
;

그러나 귀하의 경우 '날짜'의 겹침은 David B의 의견처럼 단순화 할 수 있음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top