2009-08-08 8 views
99

Quiero que mi consulta devuelva las filas de la tabla donde una columna contiene un valor específico primero, y luego devuelve el resto de las filas ordenadas alfabéticamente.¿Cómo devuelvo las filas con un valor específico primero?

Si tengo una tabla algo así como este ejemplo:

- 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 

Y el uso de esa mesa que quiero a mi consulta para devolver las filas que contienen Nueva York primero, y luego el resto de las filas en orden alfabético por la ciudad . ¿Es posible hacerlo con solo una consulta?

+0

Considere cambiar la respuesta aceptada a la segunda si es posible, ya que el primero sólo funciona para MySQL y no para MSSQL. – Magisch

+0

Hecho. Mi pregunta original era sobre MySQL, pero las etiquetas no reflejaban eso de todos modos. – Phoexo

+0

Gracias. Me encontré con esto esta mañana en un esfuerzo por hacer algo similar por un problema que tuve. :) – Magisch

Respuesta

159

En SQL Server, Oracle, DB2, y muchos otros sistemas de bases de datos, esto es lo puede utilizar:

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

De esta manera funciona en' db2'. – Samiron

+4

Excelente, también funciona en MSSQL. – Josh

+2

Esto funciona, la respuesta aceptada no. –

92

Si su lenguaje SQL es lo suficientemente inteligente como para el tratamiento de las expresiones booleanas que tienen un valor numérico, entonces usted puede utilizar:

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

Esta respuesta me hace sentir tonto. Caos bien hecho. – Bill

+2

¿Funciona en MSSQL? –

+1

@MehrdadAfshari: No, MSSQL es demasiado estúpido para procesar pruebas de equivalencia en la cláusula 'ORDER BY'. – chaos

2

Mi respuesta puede ser viejo y no es necesario pero alguien puede necesitar enfoque diferente, por lo tanto, la publicación aquí.

Tuve el mismo requisito implementado esto, funcionó para mí.

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

PS

esto es para SQL

Cuestiones relacionadas