Порядок сортировки 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

"Если пустой указатель затем поместил его в последний раз"

Как это сделано с помощью Sql 2005

/M

16
задан goodeye 27 November 2013 в 23:23
поделиться

2 ответа

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

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

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

22
ответ дан 30 November 2019 в 21:36
поделиться

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

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

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

3
ответ дан 30 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: