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 2
secció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 BY
cláusula.CASE
declaración (que es SQL estándar), SQL Server puede usar una expresión en laORDER BY
clá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 MySQLtrue
al valor1
(uno) "ORDER BY id = 123 DESC, name ASC
Mi 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