Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đệ quy CTE để có được cấu trúc phân cấp cây

Hãy thử điều này:

;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

Với Path - các hàng được sắp xếp theo các nút cha mẹ

Nếu bạn muốn sắp xếp các mã con theo ItemType cho mỗi cấp độ, bạn có thể chơi với LevelSUBSTRING của Path cột ....

Đây SQLFiddle với mẫu dữ liệu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách định dạng ngày và giờ trong SQL Server

  2. Cách tối ưu để nối / tổng hợp các chuỗi

  3. SQL chọn nơi không có trong truy vấn con không trả về kết quả

  4. Chèn dữ liệu SQL Server vào Salesforce.com

  5. Làm thế nào để bao gồm tổng số hàng được trả về trong tập kết quả từ lệnh SELECT T-SQL?