2012-06-12 69 views
7

有沒有辦法在sql中組合ORDER BYIS NULL,以便我可以按列排序,如果列不爲null,但是如果它爲null,order通過另一列?如果Column1不爲空,則按Column1排序,否則按Column2排序

謝謝!

+1

[http://stackoverflow.com/questions/5055540/order-by-countcolumns-not-null][1] - 這裏回答你的問題 [1]:HTTP:// stackoverflow.com/questions/5055540/order-by-countcolumns-not-null – yAnTar

回答

20

喜歡的東西:

ORDER BY CASE 
    WHEN Column1 IS NOT NULL THEN Column1 
    ELSE Column2 
END 

的寫法:

ORDER BY IFNULL(Column1, Column2) 
+0

非常感謝你。我不明白這句話NULL:「當按升序排列時,頂端出現在所有NULL中」你能解釋一下嗎? – 1252748

+0

按升序排序時,NULL小於任何值。如果你的數據是'-1,0,1,NULL',升序排序的結果是'NULL,-1,0,1'。 –

+0

這個'ORDER BY CASE 當Column1是NULL那麼Column2 ELSE Column1 END'似乎更清晰一點。我是否需要使用'END'語句? – 1252748

1

你可以用下面的嘗試:

ORDER BY ISNULL(firstField, secondField) 
+2

MySQL ISNULL返回1/0,而不是非空列(你的意思是IFNULL?)。 –

4

試試這個

ORDER BY COALESCE(fieldA, fieldB); 
0

我沒有任何表ATM在那裏我可以測試它,但是這可能工作,至少它確實沒有可用的數據:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.id = table2.id 
WHERE 1 
ORDER BY IF(table2.id, table1.id, table1.name) 

此外,我不知道該命令會是什麼樣子,如果表2。 id有時是空的,看起來很不穩定。

+0

SQL中沒有'IF'(絕對不適用於Postgres) –

相關問題