[SQLServer][SQL] Order by で NULLを最後に持ってくる

仕事でMicrosoftのSQLServerを使っているが、このSQLServer、資格で勉強したORACLEのSQLと細かい部分で違っている。

今日知ったのはOrder by句におけるNULLの扱い。
デフォルトではNULLが先頭にくる。ORACLEにはNULLを最後に持ってくるオプションがあったが、SQLServerのOrder by句にはそのようなオプションは無いらしい。

という訳で、Order by句に以下のCase文を加えるのが手っ取り早いようだ。

    CASE WHEN [列名] IS NULL THEN 0 ELSE 1 END DESC

使うとすれば、こんな感じ。

 SELECT
     *
 FROM
     SYOHIN
 ORDER BY
     CASE WHEN PRICE IS NULL THEN 0 ELSE 1 END DESC
    ,PRICE

こうすれば、PRICEという列の値を昇順でかつ、NULLを最後に並べることが出来る。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です