Как сначала вернуть строки с определенным значением? - PullRequest
113 голосов
/ 09 августа 2009

Я хочу, чтобы мой запрос возвращал строки таблицы, в которой столбец сначала содержит определенное значение, а затем возвращает остальные строки в алфавитном порядке.

Если у меня есть таблица, похожая на этот пример:

 - Table: Users
 - id - name -  city
 - 1    George  Seattle
 - 2    Sam     Miami
 - 3    John    New York
 - 4    Amy     New York
 - 5    Eric    Chicago
 - 6    Nick    New York

И, используя эту таблицу, я хочу, чтобы в моем запросе были возвращены строки, содержащие сначала Нью-Йорк, а затем остальные строки в алфавитном порядке по городам. Можно ли это сделать, используя только один запрос?

Ответы [ 3 ]

183 голосов
/ 09 августа 2009

В SQL Server, Oracle, DB2 и многих других системах баз данных вы можете использовать это:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
99 голосов
/ 09 августа 2009

Если ваш диалект SQL достаточно умен, чтобы трактовать логические выражения как числовые значения, вы можете использовать:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
4 голосов
/ 27 ноября 2017

Мой ответ может быть старым и не обязательным, но кому-то может понадобиться другой подход, поэтому разместите его здесь.

Я выполнил то же самое требование, сработало для меня.

Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO

PS

это для SQL

...