• I managed to figure out a more dynamic way of doing this using a couple of recursive CTE's one to traverse downt he hierarchy the second to traverse up the heirarchy.

    Heres the SQL code.

    SET STATISTICS TIME ON;

    WITH DirectReports(Name,Manager, EmployeeID, ManagerId, EmployeeLevel)

    AS

    (SELECT CONVERT(varchar(255), e.FirstName + ' ' + e.LastName),

    Convert(varchar, NULL) Manager,

    e.EmployeeID,

    convert(int,Null) ManagerId,

    0

    FROM dbo.MyEmployees AS e

    WHERE e.ManagerID IS NULL

    UNION ALL

    SELECT

    CONVERT(varchar(255), e.FirstName + ' ' + e.LastName),

    Convert(varchar,d.Name) name,

    e.EmployeeID,

    convert(int,d.EmployeeID) as ManagerId,

    EmployeeLevel + 1

    FROM dbo.MyEmployees AS e

    JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID

    ), X AS

    (

    Select Row_Number() OVER (ORDER BY EmployeeId) id,EmployeeID, Name, ManagerId, EmployeeLevel

    From DirectReports

    UNION ALL

    SELECT

    id,

    x.EmployeeId,

    CONVERT(varchar(255), e.FirstName + ' ' + e.LastName),

    e.ManagerId,

    EmployeeLevel-1

    From X

    JOIN dbo.MyEmployees as e on e.EmployeeId=x.ManagerId

    )

    Select id, EmployeeId,Max([0]),Max([1]),Max([2]),Max([3]),Max([4])

    from (Select *

    FROM (Select id,d.EmployeeId,d.ManagerId,d.Name, d.EmployeeLevel,d.EmployeeLevel c --,Sort

    from x d

    ) T

    PIVOT (MAX(Name) For EmployeeLevel IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9])) p) piv

    group by id,EmployeeID

    It takes 3ms to run on a 9 row table, on a local DB.

    In theory it should work for any Parent Child Hierarchy as long as you know the number of levels.

    _________________________________________________________________________
    SSC Guide to Posting and Best Practices