【问题标题】:SQL Sort Order with Null values last具有 Null 值的 SQL 排序顺序最后
【发布时间】:2010-03-23 07:35:54
【问题描述】:

我有以下测试代码:

CREATE TABLE #Foo (Foo int)

INSERT INTO #Foo SELECT 4
INSERT INTO #Foo SELECT NULL
INSERT INTO #Foo SELECT 2
INSERT INTO #Foo SELECT 5
INSERT INTO #Foo SELECT 1

SELECT * FROM #Foo
 ORDER BY
  CASE WHEN Foo IS NULL THEN Foo DESC ELSE Foo END

DROP TABLE #Foo

我正在尝试生成以下输出:

1 2 3 4 5 空值

"如果为 null,则放在最后"

使用 Sql 2005 是如何完成的

/M

【问题讨论】:

    标签: sql sql-server sql-server-2005


    【解决方案1】:

    一种方法是这样排序:

    ORDER BY 
    (CASE WHEN Foo IS NULL THEN 1 ELSE 0 END), Foo
    

    或者:先按 null 排序,再按 Foo 内容排序。

    【讨论】:

      【解决方案2】:

      你也可以这样做

      SELECT * FROM #Foo ORDER BY COALESCE(Foo, 2147483647)
      

      它将用最大可能的 int 替换 NULL,仅用于排序目的(因此只保留返回的值)并将其分流到任何订单的后面。

      【讨论】:

      • 呃,为什么要投反对票?如果需要,请检查此选项,它完全按照发帖人的要求完成,并且与其他发布的解决方案一样有效,代码更少。
      • 抛开任何其他问题,这样做的缺点是知道“最大值”(并确保它不会真正用于其他用途)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 2015-01-07
      • 1970-01-01
      • 2017-04-30
      • 2013-05-11
      相关资源
      最近更新 更多