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/