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

Jak wyszukiwać i analizować sąsiednią hierarchię list za pomocą cte?

Twoje przykładowe dane wyjaśniają pytanie. Poziomy menedżera możesz zbierać w miarę schodzenia:

; 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

Przykład w 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. Wyeliminuj i zmniejsz nakładające się zakresy dat

  2. Błąd podczas logowania do SQL Server

  3. Jak usunąć wiodące białe znaki w SQL Server — LTRIM()

  4. Określony schemat jest nieprawidłowy. Błędy:wiele typów z nazwą

  5. Jak możemy sprawdzić, czy tabela ma indeks, czy nie?