문제

SELECT 문을 실행하는 저장된 절차가 있습니다. 날짜 필드에서 내 결과를 주문하고 모든 레코드를 널 날짜와 가장 최근 날짜로 표시합니다.

성명서는 다음과 같습니다.

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC

이제 이것은 널 제출 날짜가 먼저 표시되는 모든 레코드를 표시하지만 날짜 값이있는 행에 도착하면 뷰에서 가장 최근 날짜가 아닙니다.

ASC를 DESC로 바꾸면 원하는 순서의 날짜가 발생하지만 NULL 값은 결과 세트의 맨 아래에 있습니다.

쿼리를 구조화하여 상단에 널 값을 표시 한 다음 날짜 값이있을 때 가장 최근에 가장 오래된 내림차순을 주문할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

@chris, 당신은 거의 가지고 있습니다.

ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, 
         [Submission Date] DESC

편집 : #EPPZ는 현재 표시된대로 위의 코드를 조정하도록 요청했습니다.

나는 개인적으로 "마법 숫자"를 만드는 것보다 훨씬 더 선호합니다. 마법의 숫자는 거의 항상 일어나기를 기다리는 문제입니다.

다른 팁

당신은 이와 같은 일을 할 수 있습니다.

ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC

표준 SQL (ISO/IEC 9075-2 : 2003 이상 -2008)은 다음을 제공합니다.

ORDER BY SomeColumn NULLS FIRST

대부분의 DBM은 아직 이것을 지원하지 않습니다.

노력하다

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC
OrderBy="ColumnName = NULL desc, ColumnName desc"

이 시도

isnull ([제출 날짜], cast ( '1770/01/01'AS DATETIME))의 일부 View Order에서 A, B, C, [제출 날짜]를 선택하십시오.

나는 이것이 오래된 것을 알고 있지만 그것을 발견했을 때 받아 들여진 해결책을 발견했습니다. https://stackoverflow.com/a/821856/7177892, 사례 진술의 결과를 오늘 (getDate ()) 또는 실제 날짜로 만들어 단순화 할 수 있습니다.

원래의:

ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, 
         [Submission Date] DESC

쉽게 한:

ORDER BY (CASE WHEN [Submission Date] IS NULL 
               THEN GETDATE() 
               ELSE [Submission Date] 
          END) DESC
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top