SQL Server - ORDER BY の並び替えで NULLを最後にする

order by で NULL のレコードを末尾にするには IIF か CASE WHEN を使用します。

NULL のレコードを末尾に

ORACLEのようにNULL時のソート順指定はできません。「IIF」 または 「CASE WHEN」 で 「NULLではないときは 0, NULLのときは 1」に変換し、ソートをします。

IIF を使用

SELECT * FROM [テーブル名]
  ORDER BY IIF([ソートするカラム名] IS NOT NULL, 0, 1),
           [ソートするカラム名];

CASE WHEN を使用

SELECT * FROM [テーブル名]
  ORDER BY (CASE WHEN [ソートするカラム名] IS NOT NULL THEN 0 ELSE 1 END),
           [ソートするカラム名];
サンプルSQL

「SampleTable テーブル」の「Point カラム」でソートしています。通常は Point が NULL のレコードが先頭に並びますが、末尾になります。

SELECT * FROM [SampleTable]
  ORDER BY IIF([Point] IS NOT NULL, 0, 1),
           [Point],
           [UserName];
SELECT * FROM [SampleTable]
  ORDER BY (CASE WHEN [Point] IS NOT NULL THEN 0 ELSE 1 END),
           [Point],
           [UserName];

実行結果 実行結果-NULL最後

何もせずソートした場合

NULL のレコードが先頭に並びます。
SELECT * FROM [SampleTable]
  ORDER BY [Point],
           [UserName];

実行結果 実行結果-NULL先頭

検証環境

関連ページ