我有一张这样的表:
id description status login XWPggD bbbbbbbb 1 js 0JIERf test1 1 js 0gd2x0 nothing NULL js bSIUIu dev NULL bob 0BNh27 hello 1 js 2TYXjd down NULL inge axE1m5 bobby NULL bob 1iSlQM qwe 0 js 9dPjoP descr NULL inge
我正在尝试按状态(底部的空值)然后通过登录对输出进行排序。 但我也想要正确排序状态为NULL的登录值,以便它看起来像:
id description status login XWPggD bbbbbbbb 1 js 0JIERf test1 1 js 0BNh27 hello 1 js 1iSlQM qwe 0 js axE1m5 bobby NULL bob bSIUIu dev NULL bob 9dPjoP descr NULL inge 2TYXjd down NULL inge 0gd2x0 nothing NULL js
但是当我尝试这样的事情时:
SELECT id, description, status, login FROM dev
ORDER BY isnull(status) ASC, isnull(login) ASC;
我总是得到一个奇怪的登录顺序,状态值为NULL。
答案 0 :(得分:10)
为什么这么复杂的答案......
SELECT id, description, status, login FROM dev
ORDER BY status IS NULL, status DESC, login IS NULL, login DESC
答案 1 :(得分: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
答案 2 :(得分:1)
尝试使用colaesce
功能,如下所示
SELECT id, description, status, login
FROM dev
ORDER BY COALESCE(status,-1) ASC, COALESCE(login,-1) ASC