Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rekurencja CTE w celu uzyskania hierarchii drzewa

Spróbuj tego:

;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

Z Path - wiersze a posortowane według węzłów nadrzędnych

Jeśli chcesz posortować węzły podrzędne według ItemType na każdym poziomie, niż możesz grać z Level i SUBSTRING Path kolumna....

Tutaj SQLFiddle z próbką danych



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Awaria łącza komunikacyjnego Wymagany SSL (nie udało się odebrać pakietu)

  2. Jak zamienić wiele znaków w SQL?

  3. Eksportuj tabelę z bazy danych do pliku csv

  4. Jak dodać kolumnę obliczeniową w tabeli SQL Server — samouczek SQL Server / T-SQL, część 47

  5. Jak używać instrukcji IF/ELSE do aktualizacji lub tworzenia nowego wpisu węzła XML w Sql