2010-02-07 58 views
6

我試圖從我的MYSQL數據庫表中取出一個有序列表基於整數值'地點'。重新排序整數,除了值爲0與SQL

SELECT * FROM mytable 
ORDER BY place; 

這工作正常,除了值的地方= 0所有行應出現在表的末尾。

所以,如果我的表是:

name place 
---- ----- 
John 1 
Do 2 
Eric 0 
Pete 2 

它應該成爲:

name place 
---- ----- 
John 1 
Do 2 
Pete 2 
Eric 0 

回答

4
SELECT * 
FROM myTable 
ORDER BY place>0 DESC, place 

是沒有CASE

+0

我喜歡這個解決方案,因爲它很小,看起來沒問題。除非效率較低,否則我會保持這一點。 – Roalt 2010-02-07 21:18:39

+0

或只是'ORDER BY place = 0,place' – ysth 2010-02-07 23:32:30

6
order by case when place = 0 then 1 else 0 end asc, place asc 

這樣,你得到所有非零下令第一。

+0

解決以前從未見過的錶殼結構(但後來,我在前期得到了我的SQL類九十年代)。由於簡單,我更喜歡@True Soft。 – Roalt 2010-02-07 21:20:20

2
SELECT * 
FROM myTable 
ORDER BY CASE place WHEN 0 THEN 9999 ELSE place END 

此方法意味着我們知道9999(或其他某個值)大於位置列中的所有可能值。

我們也可以在兩個值進行排序:

ORDER BY CASE place WHEN 0 THEN 0 ELSE -1 END, place 
+0

謝謝,9999個技巧是我自己想到的,只是不知道你可以改變評估的訂單排序標準。如果重複的訂單清單會有很高的性能損失,這將是我的第一個選擇。 – Roalt 2010-02-07 21:24:31