ORDER BYで指定した値にNULLが来た場合、それを最小とみなすか、最大とみなすかはRDBMSによって異なります。DB2ではすべての値よりも大きい値とみなしますので、NULLが最後に出力されます。いくつかのRDBMSではオーダーの順番を変更できるものもありますが、DB2は最大扱いで固定です。
そこでSQL側で工夫してNULLを最小値としてソートさせようというのが以下のスレッドです。
- SQL ORDER BY NULLS FIRSTは使えないか? (db2forum.jp)
色々と方法が提案されていて面白いです。ぜひごらんあれ。個人的にはみずほさんが書いたのをとんくまさんが手直しした
というCASEで書く方法が見やすくて良いなと思います。CASEは柔軟で使い勝手が良いことが分かりますね。また明智さんが書いているようにOLAP関数がORDER BYに書けちゃうのも驚きです。(これがSQL標準に沿っているのか、DB2の拡張なのかは分かりませんが)
そこでSQL側で工夫してNULLを最小値としてソートさせようというのが以下のスレッドです。
- SQL ORDER BY NULLS FIRSTは使えないか? (db2forum.jp)
色々と方法が提案されていて面白いです。ぜひごらんあれ。個人的にはみずほさんが書いたのをとんくまさんが手直しした
SELECT *
FROM Department
ORDER BY CASE WHEN mgrno IS NULL THEN 0 ELSE 1 END, mgrno;
というCASEで書く方法が見やすくて良いなと思います。CASEは柔軟で使い勝手が良いことが分かりますね。また明智さんが書いているようにOLAP関数がORDER BYに書けちゃうのも驚きです。(これがSQL標準に沿っているのか、DB2の拡張なのかは分かりませんが)