SQL recursive CTE
The general syntax for a recursive CTE is:
WITH cte_name (column1, column2, …)</div>
AS
(
cte_query_definition -- Anchor member</div>
UNION ALL
cte_query_definition -- Recursive member; references cte_name.</div>
)
-- Statement using the CTE</div>
SELECT *
FROM cte_name
with cte as
(
select id, lastname, 0 as lev from dbo.Employee where ReportsTo is null
union all
select e.id, e.lastname, lev + 1 from dbo.Employee e join cte
on e.ReportsTo = cte.ID
)
select lastname, lev from cte