2016-12-29 70 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;