【问题标题】:ORDER BY ASC with NULL last and subsequent ordering not workingORDER BY ASC with NULL last 和随后的排序不起作用
【发布时间】:2019-06-10 18:59:14
【问题描述】:

我有一个包含 3 个 ORDER BY 列的查询:第二个 ORDER BY 必须具有最后排序的 NULL 值;第三个ORDER BY 似乎不起作用。

下面的第一个表是我的查询生成的 - 它根据需要对NULL 进行最后排序,但第三级顺序不正确(第 3 行和第 4 行倒置)。

第 3 行上的状态 OK 应该是 after 第 4 行上的状态 LATE,因为LATEOK 之前是序数。

SELECT * FROM t
ORDER BY ORG, IIF(Earliest_Date IS NULL, 1, 0), Status;
ORG    Earliest_Date   Status
A        1/1/2019      LATE
A        2/2/2019       OK
A          NULL         OK
A          NULL        LATE
B        3/1/2019      LATE
B          NULL         OK

这是期望的结果,NULLs 排在最后,第三级升序,LATEOK 之前:

Desired:
ORG    Earliest_Date   Status
A        1/1/2019      LATE
A        2/2/2019       OK
A          NULL        LATE
A          NULL         OK
B        3/1/2019      LATE
B          NULL         OK

非常感谢任何帮助。

【问题讨论】:

  • 除了 IFF => IF 错字,此代码工作正常。 paiza.io/projects/9jiiYIszWRw5jqRnyxfyaQ?locale=ja-jp
  • 上面的链接转到指定MySQL的编辑器,OP正在询问ms-access
  • 您的查询是正确的并给出了您想要的结果,所以问题出在其他地方。是否存在'OK' 开头包含空格的情况?试试这个:SELECT * FROM t ORDER BY ORG, IIF(Earliest_Date IS NULL, 1, 0), trim(Status);
  • @forpas...我已经检查过...状态始终包含“OK”或“LATE”,因为它是我设置的值。我已经验证没有前导/尾随空格。因此我尝试的修剪不起作用。
  • @Swaroop...我一定遗漏了一些东西...我的 IIF 有效,而且语法正确...不是“IFF”...

标签: sql ms-access sql-order-by


【解决方案1】:

我没有访问权限,所以我无法自己进行测试,但听起来您需要做的就是在您的第三级ORDER BY 标准之后指定ASC,如下所示:

SELECT * 
FROM t
ORDER BY ORG, IIF(Earliest_Date IS NULL, 1, 0), Status ASC;

【讨论】:

  • ASC 是默认值。我也明确地尝试过,但没有奏效。仍然是我没有看到的东西......
【解决方案2】:

代码应该没问题,可能是其他问题,先试试下面的代码测试一下:

SELECT * FROM t
ORDER BY ORG, Status, IIF(Earliest_Date IS NULL, 1, 0)

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2017-01-20
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多