Encontré un montón de preguntas sobre este tema con buenas soluciones, pero ninguna de ellas realmente trata qué hacer si los datos no se ordenan de una manera específica. Por ejemplo, la siguiente consulta:Función SQL Row_Number() en Where Clause without ORDER BY?
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER (order by employee_id)
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
funciona bien si los datos se ordenan por employee_id. Pero, ¿qué pasa si mis datos no tienen un orden específico pero los números de las filas actúan como una identificación? Mi objetivo es escribir una consulta como la siguiente (con la función Row_Number()
tener ninguna cláusula ORDER BY
):
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER (<PRESERVE ORIGINAL ORDER FROM DB>)
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
EDIT: Al buscar en Google, me di cuenta de que esto no es realmente posible. ¿Pueden algunos sugerir una solución para esto?
A menos que tenga una cláusula explícita 'ORDEN BY', no es ** ** NO orden implícito (no hay una "orden original de DB ") en un entorno de SQL Server –
@marc_s: Gracias. Solo para aclarar, ¿quiere decir que, en una pequeña base de datos de, por ejemplo, 20000 registros, no conserva el orden de inserción (aunque no hay inserciones simultáneas)? – Legend
@marc_s: +1 Tienes razón. Incluso durante inserciones secuenciales, no conserva el orden. Esto es bastante diferente de mi experiencia MySQL. ¡Gracias por el aviso! – Legend