Je veux que ma requête renvoie les lignes de la table où une colonne contient d'abord une valeur spécifique, puis renvoie le reste des lignes par 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 veux que ma requête renvoie les lignes qui contiennent d'abord New York, puis le reste des lignes alphabétisées par ville. Est-ce possible de faire en utilisant une seule requête?
sql
sql-order-by
Phoexo
la source
la source
Réponses:
Sur SQL Server, Oracle, DB2 et de nombreux autres systèmes de base de données, voici ce que vous pouvez utiliser:
la source
ELSE 2
section signifie que si New York obtient la valeur 1, toutes les autres valeurs obtiennent la valeur 2. ... au moins en ce qui concerne l'ordre de tri.Si votre dialecte SQL est suffisamment intelligent pour traiter les expressions booléennes comme ayant une valeur numérique, vous pouvez utiliser:
la source
ORDER BY
clause.CASE
instruction (qui est SQL standard), SQL Server peut très bien utiliser une expression dans laORDER BY
clause. " trop stupide pour traiter les tests d'équivalence " est tout simplement faux. Si pas du tout, il devrait lire: " ne prend pas en charge le cast implicite de MySQL de booléentrue
à la valeur1
(un). "ORDER BY id = 123 DESC, name ASC
Ma réponse est peut-être ancienne et non obligatoire, mais quelqu'un peut avoir besoin d'une approche différente, donc l'afficher ici.
J'ai eu la même exigence mise en œuvre cela, a travaillé pour moi.
PS
c'est pour SQL
la source