Prawidłowym sposobem wykonania zamówienia jest dodanie klauzuli ORDER BY do najbardziej zewnętrznego zaznaczenia. Wszystko inne polega na szczegółach implementacji, które mogą ulec zmianie w dowolnym momencie (w tym, jeśli rozmiar bazy danych/tabeli wzrośnie, co może pozwolić na więcej przetwarzania równoległego).
Jeśli potrzebujesz czegoś wygodnego, aby umożliwić składanie zamówień, spójrz na przykład D w przykładach z Strona MSDN na Z :
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
)
Dodaj coś podobnego do kolumny EmployeeLevel do swojego CTE, a wszystko powinno działać.