SQL Server中的Null降序和放置

时间:2012-03-20 15:03:26

标签: sql sql-server

在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

并且需要在那里。 我有一些想法,比如创造一个人为的大数字。 只想看看你的家伙能想出什么。 玩得开心!

3 个答案:

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

后者可能更有效率,请查看查询计划。