Monday, January 13, 2014

Find Parents


;with cte as
(
      select employeeid, supervisorid, cast(employeeid as varchar(max)) as [list], 0 [level]
      from employee
      where employeeid = 'xxxx'
     
      union all
     
      select e.employeeid, e.supervisorid, cast(cte.list + ',' + e.employeeid as varchar(max)) as [list], level + 1
      from employee e
            inner join cte on cte.supervisorid = e.employeeid
      where cte.list not like '%' + e.employeeid + '%'
)

select * from cte order by level

Find Parents


;with cte as
(
      select employeeid, supervisorid, cast(employeeid as varchar(max)) as [list], 0 [level]
      from employee
      where employeeid = 'xxxx'
     
      union all
     
      select e.employeeid, e.supervisorid, cast(cte.list + ',' + e.employeeid as varchar(max)) as [list], level + 1
      from employee e
            inner join cte on cte.supervisorid = e.employeeid
      where cte.list not like '%' + e.employeeid + '%'
)

select * from cte order by level