2

我有一张这样的桌子:

id 描述 状态 登录
XWPggD bbbbbbbb 1 js
0JIERf 测试1 1 js
0gd2x0 没有 NULL js
bSIUIu dev NULL bob
0BNh27 你好 1 js
2TYXjd 下 NULL inge
axE1m5 bobby NULL bob
1iSlQM qwe 0 js
9dPjoP 描述 NULL 输入

我正在尝试按状态(底部的空值)然后按登录对输出进行排序。但我也希望正确排序状态为 NULL 的登录值,使其看起来像:

id 描述 状态 登录
XWPggD bbbbbbbb 1 js
0JIERf 测试1 1 js
0BNh27 你好 1 js
1iSlQM qwe 0 js
axE1m5 bobby NULL bob
bSIUIu dev NULL bob
9dPjoP 描述 NULL 输入
2TYXjd 下 NULL inge
0gd2x0 没有 NULL js

但是当我尝试类似的事情时:

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

我总是得到一个奇怪的登录顺序,其中状态值为 NULL。

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 回答