• Your code works perfectly fine. It was not returning Doc jr because you filtered it out in your where clause. The easiest way here is to add filtering to the first portion of your cte.

    declare @Number int = 111;

    WITH ctePeople

    AS ( SELECT Number

    ,Name

    ,CAST (NULL AS NVARCHAR(50)) AS ParentNumber

    ,1 AS CustLevel

    FROM tempdb.dbo.People

    WHERE ParentNumber IS NULL

    and Number = @Number

    UNION ALL

    SELECT bic.Number

    ,bic.Name

    ,cte.Number AS ParentNumber

    ,cte.CustLevel + 1

    FROM tempdb.dbo.People bic

    INNER JOIN ctePeople cte ON bic.ParentNumber = cte.Number

    WHERE bic.ParentNumber IS NOT NULL

    )

    SELECT *

    FROM ctePeople

    --WHERE Number = '111'

    -- OR ParentNumber = '111'

    ORDER BY CustLevel;

    _______________________________________________________________

    Need help? Help us help you.

    Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.

    Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.

    Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
    Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
    Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
    Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/