最后使用Null值的SQL排序顺序

Las*_*vik 16 sql sql-server sql-server-2005

我有以下测试代码:

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
Run Code Online (Sandbox Code Playgroud)

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

1
2
3
4
5
NULL

"如果为null则将其放在最后"

如何使用Sql 2005完成

/ M

Pru*_*der 22

一种方法是对它进行排序:

ORDER BY 
(CASE WHEN Foo IS NULL THEN 1 ELSE 0 END), Foo
Run Code Online (Sandbox Code Playgroud)

或者:首先按null排序,然后按Foo内容排序.


eft*_*trm 5

你也可以这样做

SELECT * FROM #Foo ORDER BY COALESCE(Foo, 2147483647)
Run Code Online (Sandbox Code Playgroud)

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

  • 抛开任何其他问题不谈,这具有知道“最大值”(并确保它不会真正用于其他用途)的缺点。 (4认同)