How to process hierarchical data in SQL-Server using recursive CTE

·

1 min read

We surely have encountered data which was structure in hierarchical mode. One example is storing employees as managers and their direct reports.

The usage sample are already well explained in Microsoft docs.

However the most important thing to remember is the way the recursion takes place.

You need to compose the Common Table Expression (CTE) from anchor member(s) and recursive member(s), at least one from each type, and they need to be combined with a UNION ALL.

WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS   
(  
    --anchor member
    SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel  
    FROM dbo.MyEmployees   
    WHERE ManagerID IS NULL  
    UNION ALL  
    --recursive member
    SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1  
    FROM dbo.MyEmployees AS e  
        INNER JOIN DirectReports AS d  
        ON e.ManagerID = d.EmployeeID   
)  
SELECT ManagerID, EmployeeID, Title, EmployeeLevel   
FROM DirectReports  
ORDER BY ManagerID;

The actually recursion process is well explained here.

Hope it is interesting.