Порядок сортировки SQL с нулевыми значениями последний - PullRequest
16 голосов
/ 23 марта 2010

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

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

/ М

Ответы [ 2 ]

22 голосов
/ 23 марта 2010

Один из способов - отсортировать его так:

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

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

3 голосов
/ 24 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...