Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Rekursi CTE untuk mendapatkan hierarki pohon

Coba ini:

;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

Dengan Path - baris yang diurutkan berdasarkan simpul orang tua

Jika Anda ingin mengurutkan simpul anak berdasarkan ItemType untuk setiap level, daripada yang bisa Anda mainkan dengan Level dan SUBSTRING dari Path kolom....

Di sini SQLFiddle dengan contoh data



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Salin tabel ke database yang berbeda pada SQL Server yang berbeda

  2. SQL Server mengonversi string ke datetime

  3. Tidak Dapat Menyelesaikan Konflik Pengumpulan

  4. Seluruh Proses untuk Memulihkan Database SQL Server Dari Command Prompt

  5. Memahami Fungsi GROUPING dan GROUPING_ID di SQL Server