Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ordine errato nella funzione con valori di tabella (mantieni l'ordine di un CTE ricorsivo)

Il modo corretto per eseguire il tuo ORDER è aggiungere una clausola ORDER BY alla tua selezione più esterna. Qualsiasi altra cosa si basa su dettagli di implementazione che possono cambiare in qualsiasi momento (incluso se la dimensione del database/delle tabelle aumenta, il che potrebbe consentire un'elaborazione più parallela).

Se hai bisogno di qualcosa di conveniente per consentire l'esecuzione dell'ordine, guarda l'esempio D negli esempi di Pagina MSDN su 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 
)

Aggiungi qualcosa di simile alla colonna EmployeeLevel del tuo CTE e tutto dovrebbe funzionare.