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?
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
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`
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
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