2017-09-11 2 views
0

change_orderchange_idに応じて行を並べ替えるこのSQLステートメントがあります。 chnfr_hdrnoは、文書番号、chnorderchange_idは、行ごとに一意のキーで、change_orderであるSQLサーバーの並べ替え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 

私の文は次のようになります。

私はその文を実行すると、結果はこのようになります:あなたが見ることができるように

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 

を使うべきか、ascendinglyソートするときは、

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

あなたは素晴らしいです!ありがとう! – user3089162