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.
Si tengo una tabla algo 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 usando esa tabla, quiero que mi consulta devuelva las filas que contienen Nueva York primero, y luego el resto de las filas ordenadas alfabéticamente por ciudad. ¿Es posible hacerlo usando solo una consulta?
sql
sql-order-by
Phoexo
fuente
fuente

Respuestas:
En SQL Server, Oracle, DB2 y muchos otros sistemas de bases de datos, esto es lo que puede usar:
fuente
ELSE 2sección significa que mientras Nueva York obtiene el valor 1, todos los demás valores obtienen el valor 2. ... al menos en lo que respecta al orden de clasificación.Si su dialecto SQL es lo suficientemente inteligente como para tratar las expresiones booleanas como si tuvieran un valor numérico, entonces puede usar:
fuente
ORDER BYcláusula.CASEdeclaración (que es SQL estándar), SQL Server puede usar una expresión en laORDER BYcláusula. " demasiado estúpido para procesar pruebas de equivalencia " es simplemente incorrecto. Si es que debería leer: " no es compatible con la conversión implícita de booleano de MySQLtrueal valor1(uno) "ORDER BY id = 123 DESC, name ASCMi respuesta puede ser antigua y no requerida, pero alguien puede necesitar un enfoque diferente, por lo tanto, publicarlo aquí.
Tenía el mismo requisito implementado esto, funcionó para mí.
PD
esto es para SQL
fuente