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

Làm cách nào để truy vấn và phân tích cú pháp phân cấp danh sách liền kề bằng cte?

Dữ liệu ví dụ của bạn làm cho câu hỏi rõ ràng hơn. Bạn có thể thu thập các cấp độ người quản lý khi bạn hạ xuống:

; with  Tree as
        (
        SELECT  empid
        ,       mgrid
        ,       1 as lv
        ,       1 as level1
        ,       null as level2
        ,       null as level3
        ,       null as level4
        ,       null as level5
        FROM    Employees
        WHERE   mgrid IS NULL 
        UNION ALL
        SELECT  E.empid
        ,       E.mgrid
        ,       T.lv + 1
        ,       T.level1
        ,       case when T.lv = 1 then E.empid else t.level2 end
        ,       case when T.lv = 2 then E.empid else t.level3 end
        ,       case when T.lv = 3 then E.empid else t.level4 end
        ,       case when T.lv = 4 then E.empid else t.level5 end
        FROM    Employees AS E
        JOIN    Tree T
        ON      E.mgrid = T.empid
        )
select  *
from    Tree

Ví dụ trong SQL Fiddle.



  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 xem nhật ký giao dịch trong SQL Server 2008

  2. Nhận ngày từ một số tuần trong T-SQL

  3. Nhận kích thước lưu trữ Bảng và Chỉ mục trong máy chủ sql

  4. Thoát ký tự thoát không hoạt động - Toán tử THÍCH SQL

  5. Truy vấn REPLACE INTO có tốt không?