SQLServerで検索時Order BYでNULLのデータを後ろに並べる方法

SQLServerでNULL値を含む列をASC(昇順・小さいもの順)でソートした場合NULLを含む行は前にソートされます。

これを最後にするにはOracleではORDER BY句にNULLS LASTオプションをつけることで実現できますが、SQLServerにはそのようなオプションは用意されていません。

そこでちょっとした一工夫が必要になります。

SQLServerで検索時NULLのデータを後ろに並べる方法

OracleでORDER BYでNULLの列を後ろに持っていくには専用のオプションが用意されており

とORDER BY句にNULLS LASTオプションをつけることで実現できます。

SQLServerにはNULLS LASTオプションのようなものはないので、一工夫が必要です。
実際にはソートされる列がNULLの場合は設計上あり得ないような大きな数値に変換するのが簡単にできる方法でしょう。

具体的には

のようにCASE WHNEを使ってNULL値を大きな数字に変換してしまいます。

CASE WHNEはISNULL関数でも構いません。

どちらで実行した場合でも結果は

name idx
name1 1
name2 2
name-null NULL

になります。

まとめ

Oracleに用意されているようなNULLS LASTオプションはSQLServerには用意されていないので、一工夫が必要です。
それほど複雑にはならないということでSQLServerには用意されていないのかもしれません。

以上、「SQLServerで検索時Order BYでNULLのデータを後ろに並べる方法」でした。