我有以下测试代码:
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
答案 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,仅用于排序(因此仅保留已修复的值),因此将其分流到任何订单的后面。