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

CTE Recursion for at få træhierarki

Prøv dette:

;WITH items AS ( SELECT EstimateItemID, ItemType , 0 AS Level , CAST(EstimateItemID AS VARCHAR(255)) AS Path FROM EstimateItem WHERE ParentEstimateItemID IS NULL AND EstimateID = @EstimateID UNION ALL SELECT i.EstimateItemID, i.ItemType , Level + 1 , CAST(Path + '.' + CAST(i.EstimateItemID AS VARCHAR(255)) AS VARCHAR(255)) FROM EstimateItem i INNER JOIN items itms ON itms.EstimateItemID = i.ParentEstimateItemID ) SELECT * FROM items ORDER BY Path

Med Path - rækker sorteret efter forældreknudepunkter

Hvis du vil sortere underordnede noder efter ItemType for hvert niveau, end du kan spille med Level og SUBSTRING af Path kolonne....

Her SQLFiddle med eksempel på data



  1. 10 tidsbesparende genveje i Microsoft Access

  2. MySQL Basic Database Administration Commands – Del I

  3. Understøtter PostgreSQL accentufølsomme sammenstillinger?

  4. Sådan beskytter du en JDBC-applikation mod SQL-injektion