sql >> Base de Datos >  >> RDS >> Sqlserver

Orden incorrecto en la función de valor de tabla (mantener el orden de un CTE recursivo)

La forma correcta de hacer su ORDEN es agregar una cláusula ORDER BY a su selección más externa. Cualquier otra cosa depende de los detalles de implementación que pueden cambiar en cualquier momento (incluso si el tamaño de su base de datos/tablas aumenta, lo que puede permitir que ocurra más procesamiento paralelo).

Si necesita algo conveniente para permitir que se realice el pedido, consulte el Ejemplo D en los ejemplos de Página de MSDN en CON :

WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS 
(
    SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel
    FROM dbo.MyEmployees 
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1
    FROM dbo.MyEmployees AS e
        INNER JOIN DirectReports AS d
        ON e.ManagerID = d.EmployeeID 
)

Agregue algo similar a la columna EmployeeLevel a su CTE, y todo debería funcionar.