2012-03-12 61 views
9

我有一個三列的表;第一列包含ID,另外兩列包含日期(最多一個爲空,但我認爲這不會影響任何內容)。我怎麼去訂購基於哪個日期更大的ID?我試過由兩個不同的(可能爲空)列的SQL順序

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

但是這沒有奏效。誰能幫我?另外,我見過其他人發佈的所有類似問題都有它,以便查詢根據第一列排序結果,然後如果第一列爲空(第二列)。我首先必須定義每個空值嗎?我通過一個完整的外連接創建這個表,所以這將是一個完全不同的問題,所以希望可以用空值完成。

+1

你的'CASE'表達式對我來說看起來很好,除了它不支持'date2'爲空的情況;爲了支持這一點,你還想編寫(說)'ORDER BY CASE WHEN date1> date2 OR date2 IS NULL THEN date1 ELSE date2 END'。但是你說它「不起作用」。你可以說得更詳細點嗎?例如,您可以發佈無法正確排序的實際數據嗎? – ruakh 2012-03-12 02:18:15

+0

Gabe,什麼數據庫將運行查詢? – 2012-03-12 02:19:53

+0

對不起,我以爲他們都是一樣的。但我正在使用Oracle。我不知道這對你們來說是否足夠具體。 :S – 2012-03-12 02:26:17

回答

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

這樣做了,謝謝! :d – 2012-03-12 02:24:53

-1

的Try ...

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

是的,但是你不能以標準SQL的方式將它加入到date1!= null上,然後在date2!= null再次加入表,但同時給出具有未定義行爲的ALIAS。 – DanRedux 2012-03-12 02:19:31

+0

(我刪除了我以前的評論,用一個更清晰的評論替換它們。)我不認爲任何DBMS都支持使用MAX。也許你正在想'最好'?但無論如何,真的不需要這種方法。這些表達式可以放在'ORDER BY'子句中。 – ruakh 2012-03-12 02:25:53

+0

他們可以,但它是別名,因爲它自己的列允許日期也可以檢索。額外的免費功能。 – DanRedux 2012-03-12 02:27:49