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

时间:2010-03-23 07:35:54

标签: 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

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

1
2
3
4
5
NULL

“如果为null,则将其放在最后”

如何使用Sql 2005

完成

/ M

2 个答案:

答案 0 :(得分:22)

一种方法是按照这样排序:

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

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

答案 1 :(得分:3)

您也可以

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

它将使用最大可能的int替换NULL,仅用于排序(因此仅保留已修复的值),因此将其分流到任何订单的后面。