按日期排序显示NULLS首先是最近的日期

Epp*_*ppz 58 sql-server sql-server-2000

我有一个执行select语句的存储过程.我希望我的结果按日期字段排序,并显示所有记录首先是NULL日期,然后是最近的日期.

声明如下:

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC
Run Code Online (Sandbox Code Playgroud)

现在,这将首先显示所有具有NULL提交日期的记录,但是当我到达具有日期值的行时,它们不是视图中的最新日期.

如果我用DESC替换ASC,那么我按照我想要的顺序获取日期,但NULL值位于我的结果集的底部.

有没有办法构建我的查询,以便我可以在顶部显示空值,然后当有日期值时,为了命令它们从最近的下降到最早?

Eur*_*lli 103

@Chris,你几乎拥有它.

ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, 
         [Submission Date] DESC
Run Code Online (Sandbox Code Playgroud)

[编辑:#Eppz让我调整上面的代码,如当前所示]

我个人比创建"魔术数字"要好得多.魔术数字几乎总是等待发生的问题.

  • 为什么要打扰DESC?只需切换0和1即可. (4认同)

Chr*_*tow 25

你可以做这样的事情把NULL放在底部:

ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC
Run Code Online (Sandbox Code Playgroud)

  • @AndrewBramwell 方括号在列名具有嵌入的空格时有帮助 (2认同)

Jon*_*ler 18

标准SQL(ISO/IEC 9075-2:2003或更高版本 - 2008)规定:

ORDER BY SomeColumn NULLS FIRST
Run Code Online (Sandbox Code Playgroud)

大多数DBMS实际上并不支持这个,AFAIK.

  • 感谢您的提示,适用于Oracle 11g. (2认同)