Ответ 1
В SQL Server, Oracle, DB2 и многих других системах баз данных вы можете использовать:
ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
Я хочу, чтобы мой запрос возвращал строки таблицы, где столбец содержит определенное значение сначала, а затем возвращает остальные строки в алфавитном порядке.
Если у меня есть таблица, похожая на этот пример:
- 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
И используя эту таблицу, я хочу, чтобы мой запрос возвращал строки, содержащие сначала Нью-Йорк, а затем остальные строки в алфавитном порядке по городу. Можно ли использовать только один запрос?
В SQL Server, Oracle, DB2 и многих других системах баз данных вы можете использовать:
ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
Если ваш SQL-диалект достаточно интеллектуальный, чтобы обрабатывать булевы выражения как имеющие числовое значение, вы можете использовать:
SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
Мой ответ может быть старым и не обязательным, но кому-то может понадобиться другой подход, поэтому размещайте его здесь.
У меня было такое же требование, что и я, это работало для меня.
Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO
PS
это для SQL