2012-08-09 2 views
0

J'ai essayé quelques petites choses, mais je dessine un blanc. Voici ma question:En SQL, comment puis-je donner une priorité à une colonne correspondante plutôt qu'une autre?

SELECT * 
    FROM Companies 
WHERE 
    Symbol LIKE 'ZY%' OR 
    Name LIKE '%ZY%' 
ORDER BY Symbol ASC 
LIMIT 2; 

Fondamentalement, je veux "ZY" pour correspondre (ZNGA, Zynga Inc) avant les matchs (HALO, Halozyme Therapeuti ...).

Il est évident que la raison de l'ordre est cette partie de la requête:

ORDER BY Symbol 

Suis-je manque quelque chose évidente ici?

+0

Quels sont les critères pour choisir la priorité ? –

+0

La requête devrait se préoccuper davantage de la correspondance du symbole que du nom. –

+0

Votre exemple ne fonctionne pas alors puisque le symbole ZNGA de Zynga ne correspond pas à votre critère de recherche 'ZY%' –

Répondre

5

Il vous suffit de l'ajouter à l'ordre par la clause

SELECT * FROM Companies WHERE Symbol LIKE 'ZY%' OR Name LIKE '%ZY%' 
ORDER BY 
    (CASE WHEN Symbol LIKE 'ZY%' THEN 1 
     WHEN Name LIKE '%ZY%' THEN 2 
     END), 
Symbol ASC; 
+0

Cela fonctionne, à l'exception d'une faute de frappe. La deuxième clause WHEN doit comparer Name et non Symbol. –

+0

Pour l'OP, une déclaration de cas peut être utilisée dans les conditions de jointure et les clauses where, cela peut être utilisé pour simuler des évaluations de court-circuit (ce qui suggère que votre titre vous intéressait). – jmoreno

+0

Merci, faute de frappe – Chi

0

Je ne sais pas c'est ce que vous cherchez, mais ...

ORDER BY CASE WHEN Symbol LIKE 'ZY%' THEN Symbol ELSE Name END ASC 
Questions connexes