Jak zwrócić najpierw wiersze o określonej wartości?

Chcę, aby moje zapytanie zwróciło wiersze tabeli, w której kolumna zawiera określoną wartość, a następnie zwróciło resztę wierszy ułożonych alfabetycznie.

Jeśli mam tabelę coś takiego jak ten przykład:

 - 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

I używając tej tabeli chcę, aby moje zapytanie zwróciło wiersze, które zawierają najpierw Nowy Jork, a następnie resztę wierszy ułożonych alfabetycznie według miasta. Czy można to zrobić używając tylko jednego zapytania?

Author: chaos, 2009-08-09

3 answers

Na SQL Server, Oracle, DB2 i wielu innych systemach bazodanowych możesz użyć tego:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
 170
Author: Rob Farley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-09 21:25:32

Jeśli twój dialekt SQL jest wystarczająco inteligentny, aby traktować wyrażenia logiczne jako posiadające wartość liczbową, możesz użyć:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
 95
Author: chaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 16:15:37

Moja odpowiedź może być stara i nie jest wymagana, ale ktoś może potrzebować innego podejścia,stąd zamieszczenie jej tutaj.

Miałem ten sam wymóg zaimplementowany to, pracował dla mnie.

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

PS

To jest dla SQL

 3
Author: Manjuboyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 04:19:12