Порядок сортировки SQL с нулевыми значениями

У меня есть следующий тестовый код:

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

Ответ 1

Один из способов - отсортировать его следующим образом:

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

Или: сначала сортируйте по нулевому значению, затем сортируйте по содержимому Foo.

Ответ 2

Вы также можете сделать

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

который заменит NULL на максимально возможный int для целей сортировки (так что оставив только сохраненные значения) и таким образом шунтирует его в обратном порядке любого порядка.