2012-03-12 2 views
9

3 개의 열이있는 테이블이 있습니다. 첫 번째 열에는 ID가 포함되고 다른 두 열에는 날짜가 포함됩니다 (최대 하나는 null이지만 아무 것도 영향을 미치지 않습니다). 어떤 날짜가 더 큰지에 따라 ID를 주문하려면 어떻게해야합니까? 시도했습니다.두 개의 서로 다른 (null 일 수도 있음) 열의 SQL 순서

ORDER BY CASE 
WHEN date1 > date2 THEN date1 
ELSE date2 
END 

하지만 작동하지 않았습니다. 누구든지 나를 도울 수 있습니까? 또한 다른 사람들이 보았던 유사한 문제는 모두 쿼리가 첫 번째 열인 을 기반으로 결과를 정렬하고 첫 번째 열이 null 인 경우 인 두 번째 열이 정렬되도록합니다. 먼저 모든 단일 null 값을 정의해야합니까? 완전 외부 조인을 통해이 테이블을 만들므로 물어 보는 것은 완전히 다른 질문이 될 것이므로 잘하면 null 값을 사용하여 수행 할 수 있습니다.

+1

'CASE' 표현은'date2'가 null 인 경우를 지원하지 않는다는 점을 제외하고 나에게 잘 들립니다. 그것을 지원하기 위해서, 당신은 '주문 일 경우 날짜 1> 날짜 2 또는 날짜 2 IS NULL THEN 날짜 1 ELSE 날짜 2 END'를 써야한다고 말하고 싶습니다. 그러나 당신은 그것이 "효과가 없다"고 말합니다. 더 자세하게 얘기해 주 시겠어요? 예를 들어, 올바르게 주문하지 못한 실제 데이터를 게시 할 수 있습니까? – ruakh

+0

게이브, 어떤 데이터베이스가 쿼리를 실행할 것입니까? –

+0

죄송합니다. 나는 그들 모두가 똑같이 일했다고 생각했습니다. 하지만 오라클을 사용하고 있습니다. 그게 충분히 특이한 지 모르겠다. : S –

답변

15

나는 당신의 문제가 열 중 하나가 NULL 인 경우 실패 비교 관련이있다 생각합니다. 그래서, 아마도 당신이 필요합니다 :

ORDER BY CASE 
      WHEN date1 IS NULL THEN date2 
      WHEN date2 IS NULL THEN date1 
      WHEN date1 > date2 THEN date1 
      ELSE     date2 
      END 
+0

감사합니다. :디 –

-1

시도 ...

SELECT MAX(date1,date2) date FROM table ORDER BY date; 
+0

네,하지만 표준 SQL에서는 table1을 date1! = null에 가입시키지 않고 date2! = null에 다시 참여하지 않고 정의되지 않은 동작을 가진 동일한 ALIAS를 제공하지 않습니다. – DanRedux

+0

(필자의 이전 코멘트를 삭제하여 더 명확한 것으로 대체했습니다.) DBMS가 'MAX'의 사용을 지원한다고 생각하지 않습니다. 어쩌면 당신은'대단한'을 생각하고 있을까요? 하지만 어쨌든이 접근법은 실제로 필요하지 않습니다. 이 표현식은'ORDER BY' 절에 그대로 적용될 수 있습니다. – ruakh

+0

그들은 할 수는 있지만, 자신의 컬럼으로 앨리어싱을하면 날짜도 검색 할 수 있습니다. 추가 기능. – DanRedux

관련 문제