Chcę, aby moje zapytanie zwróciło wiersze tabeli, w których kolumna zawiera najpierw określoną wartość, a następnie zwróciło pozostałe wiersze w kolejności alfabetycznej.
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
Korzystając z tej tabeli, chcę, aby moje zapytanie zwróciło wiersze zawierające najpierw Nowy Jork, a następnie pozostałe wiersze ułożone alfabetycznie według miasta. Czy można to zrobić za pomocą tylko jednego zapytania?
sql
sql-order-by
Phoexo
źródło
źródło
Odpowiedzi:
W SQL Server, Oracle, DB2 i wielu innych systemach baz danych można użyć:
źródło
ELSE 2
sekcja oznacza, że podczas gdy Nowy Jork otrzymuje wartość 1, wszystkie inne wartości otrzymują wartość 2. ... przynajmniej jeśli chodzi o porządek sortowania.Jeśli Twój dialekt SQL jest wystarczająco inteligentny, aby traktować wyrażenia boolowskie jako mające wartość liczbową, możesz użyć:
źródło
ORDER BY
klauzuli.CASE
instrukcji (która jest standardowym SQL) SQL Server może bardzo dobrze użyć wyrażenia wORDER BY
klauzuli. „ zbyt głupi, by przetwarzać testy równoważności ” jest po prostu błędem. Jeśli w ogóle powinno brzmieć: „ nie obsługuje niejawnego rzutowania wartości logicznejtrue
na wartość1
(jeden) MySQL ” .ORDER BY id = 123 DESC, name ASC
Moja odpowiedź może być stara i niewymagana, ale ktoś może potrzebować innego podejścia, dlatego zamieszczam ją tutaj.
Miałem ten sam wymóg zaimplementowany, zadziałał dla mnie.
PS
to jest dla SQL
źródło