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