I know I am going to get some heat because of it but hey USA is a free country.
declare @user_id int
select @user_id = 2
;with cte
AS
(
select b.id, b.parent_id, b.name as bunit, w.id as wid, w.name as wgrp
from bizunit b
inner join
workgroup_bizunit wb on b.id = wb.bid
inner join
workgroup w on wb.wgid = w.id
inner join
users_workgroup uw on uw.wgid = wb.wgid
where uw.uid = @user_id
union all
select b.id, b.parent_id, b.name as bunit, w.id as wid, w.name as wgrp
from bizunit b
inner join cte
on b.parent_id = cte.id
inner join
workgroup w on cte.wid = w.id
)
select bunit, wgrp
from cte
order by bunit, wgrp
* Noel