Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Falsche Reihenfolge in Tabellenwertfunktion (Reihenfolge eines rekursiven CTE beibehalten)

Der richtige Weg, Ihre ORDERing durchzuführen, besteht darin, Ihrer äußersten Auswahl eine ORDER BY-Klausel hinzuzufügen. Alles andere hängt von Implementierungsdetails ab, die sich jederzeit ändern können (einschließlich, wenn die Größe Ihrer Datenbank/Tabellen zunimmt, was eine weitere parallele Verarbeitung ermöglichen kann).

Wenn Sie etwas Praktisches benötigen, um das Bestellen zu ermöglichen, sehen Sie sich Beispiel D in den Beispielen aus der MSDN-Seite auf WITH :

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 
)

Fügen Sie Ihrem CTE etwas Ähnliches zur EmployeeLevel-Spalte hinzu, und alles sollte funktionieren.