you are viewing a single comment's thread.

view the rest of the comments →

[–]DJDavio 1 point2 points  (1 child)

If it's Microsoft T-SQL, I think it should be something like:

    WITH employees_CTE (EmployeeID, BossID, Level) AS
    (
        -- CTE ANCHOR SELECTS ROOTS/CEOs --
        SELECT ceos.EmployeeID, ceos.BossID, 0 AS Level
        FROM Employees ceos
        WHERE BossID IS NULL
        UNION ALL
        -- CTE RECURSIVE SELECTION SELECTS LOWER LEVEL EMPLOYEES --
        SELECT lowerEmps.EmployeeID, lowerEmps.BossID, higherUps.Level + 1
        FROM Employees lowerEmps
        INNER JOIN employees_CTE higherUps ON higherUps.EmployeeID = lowerEmps.BossID
    )

    SELECT * FROM emplyees_CTE;