2017-09-11 103 views
0

我有这条SQL语句,根据它们的排序行change_orderchange_idSQL Server Sorting Int列错误

我的发言是这样的:

select * 
from change_dtl_from2 
where chnfr_hdrno = 'CH000009' 
order by 
    case 
     when chnorder is null 
      then 1 
      else 0 
    end asc, change_id asc 

哪里chnfr_hdrno为文档编号,chnorderchange_orderchange_id是每行的唯一关键。

如果我执行该语句,结果会是这样:

enter image description here

正如你所看到的,一行5 chnorder值在最顶端,其中chnorder设置其排序我不知道我在做什么或错在哪里。

默认值chnorder为空,并且是int列。这就是为什么我很困惑,因为每当我添加一个新的行时,新的一个将是最重要的。我希望你们都能帮助我。 :)

+7

当递增排序,0变得目前还不清楚你期待看到什么1之前。对于显示'chnorder'的所有行都已设置,因此它们将全部按0排序,然后是'change_id'中的值。 – CodeCaster

+3

您当前的输出是正确的和预期的。 –

+1

由于样本数据中'chnorder'的所有值都是NOT NULL,那么整个数据集就会被'change_id'排序 - 并且它被** change_id正确排序**所以问题是什么? –

回答

0

SQL根据您的查询做一切正确。使用CASE语句,将所有非NULL值替换为1,并仅通过change_id对其进行排序。如果你只是想用1来代替NULL,你应该使用

order by (case when chnorder is null then 1 else chnordner end) asc 

,或者你应该使用

order by (case when chnorder is null then 1 else 0 end) asc, chnordner asc, change_id asc 
+0

你先生是辉煌的!谢谢! – user3089162