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

Cách đơn giản nhất để thực hiện tự tham gia đệ quy?

WITH    q AS 
        (
        SELECT  *
        FROM    mytable
        WHERE   ParentID IS NULL -- this condition defines the ultimate ancestors in your chain, change it as appropriate
        UNION ALL
        SELECT  m.*
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q

Bằng cách thêm điều kiện đặt hàng, bạn có thể duy trì đơn hàng cây:

WITH    q AS 
        (
        SELECT  m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc
        FROM    mytable m
        WHERE   ParentID IS NULL
        UNION ALL
        SELECT  m.*,  q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q
ORDER BY
        bc

Bằng cách thay đổi ORDER BY điều kiện bạn có thể thay đổi thứ tự của các anh chị em.



  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 phụ thuộc

  2. Cách thay đổi kiểu dữ liệu của cột trong SQL Server (T-SQL)

  3. Tôi nhận được Một nỗ lực đã được thực hiện để tải một chương trình có lỗi định dạng không chính xác trên một dự án sao chép SQL Server

  4. Có một Entity Framework 7 Database-First POCO Generator không?

  5. Hàm COALESCE trong TSQL