2016-12-29 69 views
2

我有一個表像這樣SQL命令

id title display_order 
9  t9  0 
1  t1  3 
2  t2  1 
3  t3  5 
4  t4  4 
9  t9  0 
10 t10  0 

我需要的是有結果這樣

id title display_order 
2  t2  1 
1  t1  3 
4  t4  4 
3  t3  5 
6  t6  0 
9  t9  0 
10 t10  0 

我可以這樣做:

SELECT * 
FROM atable 
ORDER BY 
    display_order = 0, 
    display_order 

但不幸的是,我無法在SQL Sever 2014中執行此操作。此錯誤出現在此行上:display_order = 0,。你有什麼提示,我怎麼能在SQL服務器上做到這一點?

+0

沒有回答你的問題? – GurV

回答

4
SELECT * 
FROM atable 
ORDER BY 
    case when display_order = 0 then 1 else 0 end, 
    display_order, 
    id; 
+1

總是不錯,不僅僅包含SQL!儘管這很簡單! (儘管不應該是第三種排序方式,我們希望0的排序是什麼?)(不是標題,因爲它會在t6之前放置t10。) – xQbert

1
SELECT * 
FROM atable 
ORDER BY 
    CASE display_order 
    WHEN 0 THEN 1 
    ELSE 0 END ASC, 
    display_order ASC 
+1

正確的想法,但顯示順序= 0的行需要在那些<> 0,所以應該是案件陳述而不是DESC的ASC。 –

+1

@GarethLyons謝謝。修復。 – DVT

1

可以呀!這是SQL服務器的功能,只是很少有人知道一個:

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

在這裏,我們可以通過兩種方式訂購此,

  1. 秩序與零的記錄和非零
  2. 然後將非零記錄指定給Dislpay_Order。

所以用這個下面的代碼以使

SELECT * 
FROM atable 
ORDER BY 
    CASE WHEN display_order = 0 then 1 else 0 end, display_order;