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

Forkert rækkefølge i tabelværdien funktion (hold orden på en rekursiv CTE)

Den korrekte måde at gøre din BESTILLING på er at tilføje en ORDER BY-klausul til dit yderste udvalg. Alt andet er afhængigt af implementeringsdetaljer, der kan ændre sig til enhver tid (inklusive hvis størrelsen på din database/tabeller stiger, hvilket kan tillade mere parallel behandling).

Hvis du har brug for noget praktisk til at tillade bestillingen at finde sted, så se på eksempel D i eksemplerne fra MSDN-side på 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 
)

Tilføj noget lignende til EmployeeLevel-kolonnen til din CTE, og alt burde virke.



  1. Oracle Brugerdefineret type inde i pakkedefinition

  2. Kører PostgreSQL nogle ydelsesoptimeringer for skrivebeskyttede transaktioner

  3. android listevisning opdatere/opdater data uden at lukke appen

  4. SQL:hvordan finder jeg ud af, om indholdet af en varchar-kolonne er numerisk?