sql >> Database >  >> RDS >> Sqlserver

Hoe de aangrenzende lijsthiërarchie opvragen en ontleden met behulp van cte?

Uw voorbeeldgegevens maken de vraag duidelijker. U kunt de managerniveaus verzamelen terwijl u afdaalt:

; 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

Voorbeeld bij SQL Fiddle.



  1. Hoe kan ik een niet-lege resultaatset krijgen bij het gebruik van selecteren, groeperen op en tellen?

  2. Hoe een aliaskolom in mysql te verbergen EDITED

  3. Mysql-tabelgrootte op de HDD

  4. Toon som onderaan kolom in mysql