在SQL Server中,我有一个列,如ID,包含整数,降序为一个空值 恩。
ID
====
20
19
18
...
2
1
null
select id from mytable order by id desc
我需要将它按顺序降序但在顶部为null:
ID
====
null
20
19
18
...
2
1
null是先前的结果
union all
并且需要在那里。 我有一些想法,比如创造一个人为的大数字。 只想看看你的家伙能想出什么。 玩得开心!
答案 0 :(得分:6)
使用CASE
中的ORDER BY
强制NULL
先发送SELECT
id
FROM mytable
ORDER BY
CASE WHEN id IS NULL THEN 0 ELSE 1 END,
id DESC
。这得到了SQL Server的支持。
NULL
它的工作原理是派生一个“列”,对其进行排序,其中ORDER BY
为0,其他所有为1。 0在1.之前排序。然后,我们添加id DESC
列链的其余部分以继续排序,因此添加{{1}}会强制剩余的行(具有派生的1的行)按降序排序由id。
答案 1 :(得分:2)
您没有指定DBMS,但如果它符合ANSI标准,则可以执行以下操作:
ORDER BY id NULLS FIRST
(适用于Oracle,PostgreSQL,DB2,H2,HSQLDB,Derby,Firebird)
答案 2 :(得分:1)
通常情况下,了解您正在使用的特定DBMS会有所帮助,但通常有几种选择。
CASE
通常支持 ORDER BY
,因此您可以执行以下操作:
ORDER BY CASE ID WHEN IS NULL THEN 1 ELSE 0 DESC, ID DESC
或者你可以按照你的建议去做并使用大量的
ORDER BY COALESCE(ID, 2147483647) DESC --or whatever your maxint is
后者可能更有效率,请查看查询计划。