Por ejemplo, considere la consulta SQL:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC)
FROM
[FooTable] AS A
Aquí observo los resultados que se devuelven ordenados por A. [Nombre]. Si cambio la columna de clasificación definida en la función ROW_NUMBER a otra columna, nuevamente los resultados se ordenarán por esa columna.
Esperaba que se asignara el número de fila a las filas, pero no esperaba que las filas volvieran ordenadas por ese mismo criterio. ¿Es esto simplemente un efecto secundario de cómo se ejecuta la consulta (en mi caso en SQL Server 2008 R2) o se garantiza este comportamiento? (No pude encontrar ninguna referencia a dicha garantía).
sql-server-2008-r2
order-by
Redcalx
fuente
fuente
Respuestas:
Si hiciste la pregunta, creo que realmente querías preguntar:
Podríamos haberle dicho que creara un alias para la
ROW_NUMBER()
expresión y luego ordenara usando el alias:Ahora solo tiene que cambiar la expresión en un lugar, y el orden resultante se basará en esa expresión sin tener que repetirla.
fuente
repeating the complex ORDER BY expression
ni siquiera garantiza que la salida saldrá por orden ROW_NUMBER (). A menos que las columnas en la cláusula ORDER BY formen una clave única.Absolutamente no. Prueba:
La única forma de garantizar un pedido en SQL es solicitarlo, usarlo
ORDER BY
en el resultado mismo.fuente
En realidad, la pregunta (antigua) podría extenderse para incluir también la partición por parte, ya que parece haber un orden implícito primero por la partición por y luego el orden por parte (s)
Por lo tanto, no es tan simple como algunos han sugerido asignar el número de fila y usarlo para ordenar.
También necesitaríamos un sql anidado que extraiga la partición por cláusula (si no queremos simplemente repetirlo, por supuesto)
Empíricamente parece que obtenemos implícitamente la última línea de pedidos
Pero lo que nos falta es alguna prueba o garantía de que siempre se mantenga.
(Si hay varias llamadas Row_Number () en juego, es la ÚLTIMA que parece dar el orden)
TAMBIÉN TENGA EN CUENTA que si agrega explícitamente el orden por el plan de ejecución, muestra claramente un paso de clasificación final, y ordenar un conjunto ya ordenado es el peor de los casos, por lo tanto, lleva mucho más tiempo con el orden por que sin
fuente