web-dev-qa-db-fra.com

Comment puis-je retourner les lignes avec une valeur spécifique en premier?

Je souhaite que ma requête renvoie les lignes de la table où une colonne contient une valeur spécifique en premier, puis renvoie le reste des lignes en ordre alphabétique.

Si j'ai une table quelque chose comme cet exemple:

 - 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

Et en utilisant cette table, je souhaite que ma requête renvoie les lignes qui contiennent d’abord New York, puis le reste des lignes en ordre alphabétique par ville. Est-ce possible d'utiliser une seule requête?

116
Phoexo

Sur SQL Server, Oracle, DB2 et de nombreux autres systèmes de base de données, voici ce que vous pouvez utiliser:

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

Si votre dialecte SQL est suffisamment intelligent pour traiter les expressions booléennes comme ayant une valeur numérique, vous pouvez utiliser:

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

Ma réponse est peut-être ancienne et n'est pas obligatoire, mais quelqu'un peut avoir besoin d'une approche différente, et l'affiche donc ici.

J'ai eu même exigence mis en œuvre cela, a travaillé pour moi.

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

PS

c'est pour SQL

4
Manjuboyz