2

次のようなテーブルがあります。

ID 説明 ステータス ログイン
XWPggD bbbbbbbb 1 js
0JIERf テスト 1 1 js
0gd2x0 何も NULL js
bSIUIu dev NULL bob
0BNh27 こんにちは 1 js
2TYXjd ダウン NULL インジ
axE1m5 ボビー NULL ボブ
1iSlQM qwe 0 js
9dPjoP descr NULL inge

出力をステータス(下部のnull値)でソートしてから、ログインでソートしようとしています。しかし、ステータスが NULL であるログイン値も、次のように正しく並べ替えたいと考えています。

ID 説明 ステータス ログイン
XWPggD bbbbbbbb 1 js
0JIERf テスト 1 1 js
0BNh27 こんにちは 1 js
1iSlQM qwe 0 js
axE1m5 ボビー NULL ボブ
bSIUIu dev NULL bob
9dPjoP descr NULL inge
2TYXjd ダウン NULL インジ
0gd2x0 何も NULL js

しかし、次のようなことを試みると:

SELECT id, description, status, login FROM dev
ORDER BY isnull(status) ASC, isnull(login) ASC;

ステータス値が NULL である奇妙な loginorder が常に表示されます。

4

3 に答える 3

10

なぜそんなに複雑な答え...

SELECT id, description, status, login FROM dev
ORDER BY status IS NULL, status DESC, login IS NULL, login DESC
于 2013-08-02T07:52:43.803 に答える
4
SELECT id, description, status, login FROM dev
ORDER BY (Case when status is null then -1 Else status End ) Desc,
(Case when login is null then -1 Else 1 End ) Desc
于 2013-08-02T07:48:42.937 に答える
1

colaesce以下のように関数を使用してみてください

SELECT id, description, status, login 
FROM dev
ORDER BY COALESCE(status,-1) ASC, COALESCE(login,-1) ASC
于 2013-08-02T07:49:23.073 に答える