У меня есть следующий тестовый код:
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
Один из способов - отсортировать его следующим образом:
ORDER BY
(CASE WHEN Foo IS NULL THEN 1 ELSE 0 END), Foo
Или: сначала отсортировать по нулю, затем отсортировать по содержимому Foo.
Вы также можете сделать
SELECT * FROM #Foo ORDER BY COALESCE(Foo, 2147483647)
, который заменит NULL на максимально возможное целое число только для целей сортировки (так что оставив только восстановленные значения) и таким образом переместит его в конец любого порядка.