2011-10-03 46 views
6

我有這樣獲取與價值排序行與值大於零個,則行零

id title display_order 
1  t1  3 
2  t2  1 
3  t3  5 
4  t4  4 
5  t5  2 
6  t6  0 
7  t7  7 
8  t8  6 
9  t9  0 
10 t10  0 

表我需要的是有這樣的

id title display_order 
2  t2  1 
5  t5  2 
1  t1  3 
4  t4  4 
3  t3  5 
8  t8  6 
7  t7  7 
...order of the rest is not important but should be in the result 
6  t6  0 
9  t9  0 
10 t10  0 

結果我能得到這個導致兩個SQL查詢,然後將它們組合起來。

有沒有辦法用一個SQL做到這一點?

由於

回答

15
SELECT * 
FROM atable 
ORDER BY 
    display_order = 0, 
    display_order 

display_order爲0時,第一分揀術語,display_order = 0,計算結果爲True,否則它取值爲FalseTrueFalse之後排序 - 因此,第一個排序標準確保display_order爲0的行在列表末尾排序。

第二個ORDER BY項display_order額外指定了具有非零順序值的行的順序。

因此,這兩個標準給你所需的排序順序。

3

嘗試下面單

SELECT * FROM table_name 
ORDER BY IF (display_order = 0, 9999999, display_order) 
1

以下是在任何情況下,在T-SQL中的溶液需要它

SELECT * FROM Table ORDER BY CASE WHEN display_order = 0 THEN display_order END ASC,CASE WHEN display_order > 0 THEN display_order END ASC