Ich möchte, dass meine Abfrage zuerst die Zeilen der Tabelle zurückgibt, in denen eine Spalte einen bestimmten Wert enthält, und dann den Rest der Zeilen alphabetisch zurückgibt.
Wenn ich eine Tabelle wie dieses habe:
- 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
Und mit dieser Tabelle möchte ich bei meiner Abfrage die Zeilen zurückgeben, die zuerst New York und dann den Rest der Zeilen nach Stadt alphabetisch sortieren. Ist dies mit nur einer Abfrage möglich?
sql
sql-order-by
Phoexo
quelle
quelle
Antworten:
Auf SQL Server, Oracle, DB2 und vielen anderen Datenbanksystemen können Sie Folgendes verwenden:
quelle
ELSE 2
Abschnitt bedeutet, dass New York zwar den Wert 1 erhält, alle anderen Werte jedoch den Wert 2. ... zumindest was die Sortierreihenfolge betrifft.Wenn Ihr SQL-Dialekt intelligent genug ist, um boolesche Ausdrücke als numerisch zu behandeln, können Sie Folgendes verwenden:
quelle
ORDER BY
Klausel zu verarbeiten.CASE
Anweisung (bei der es sich um Standard-SQL handelt) kann SQL Server sehr gut einen Ausdruck in derORDER BY
Klausel verwenden. " zu dumm, um Äquivalenztests durchzuführen " ist einfach falsch. Wenn überhaupt, sollte es lauten: " Unterstützt nicht MySQLs implizites Casting von Booleantrue
auf den Wert1
(eins). "ORDER BY id = 123 DESC, name ASC
Meine Antwort ist möglicherweise alt und nicht erforderlich, aber jemand benötigt möglicherweise einen anderen Ansatz und veröffentlicht sie daher hier.
Ich hatte die gleiche Anforderung implementiert, arbeitete für mich.
PS
Dies ist für SQL
quelle