2017-09-11 89 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