137 Stimmen

Wie gebe ich zuerst Zeilen mit einem bestimmten Wert zurück?

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 sortiert zurückgibt.

Wenn ich eine Tabelle wie in diesem Beispiel 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, dass meine Abfrage die Zeilen zurückgibt, die zuerst New York enthalten, und dann den Rest der Zeilen alphabetisch nach Städten geordnet. Ist dies möglich, mit nur einer Abfrage zu tun?

0 Stimmen

Erwägen Sie, die akzeptierte Antwort in die zweite zu ändern, wenn Sie können, da die erste nur für MySQL und nicht für MSSQL funktioniert.

0 Stimmen

Erledigt. Meine ursprüngliche Frage bezog sich auf MySQL, aber die Tags spiegeln das ohnehin nicht wider.

0 Stimmen

Ich danke Ihnen. Ich bin heute Morgen darauf gestoßen, als ich versuchte, etwas Ähnliches für ein Problem zu tun, das ich hatte :)

219voto

Rob Farley Punkte 15180

Bei SQL Server, Oracle, DB2 und vielen anderen Datenbanksystemen können Sie dies verwenden:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city

107voto

chaos Punkte 118918

Wenn Ihr SQL-Dialekt intelligent genug ist, um boolesche Ausdrücke so zu behandeln, als hätten sie einen numerischen Wert, dann können Sie verwenden:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`

6voto

Manjuboyz Punkte 6645

Meine Antwort ist vielleicht veraltet und wird nicht benötigt, aber vielleicht braucht jemand einen anderen Ansatz, deshalb poste ich sie hier.

Ich hatte die gleiche Anforderung implementiert diese, arbeitete für mich.

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

PS

dies ist für SQL

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X