Как мне изменить дизайн приведенного ниже запроса, чтобы он рекурсивно проходил по всему дереву, возвращая всех потомков от корня к листьям?(Я использую SSMS 2008).У нас есть президент в корне.под ним находятся вице-президенты, затем высшее руководство и т. д. по линии.Мне нужно вернуть имена и названия каждого.Но этот запрос не должен быть жестко закодирован;Я должен быть в состоянии выполнить это для любого выбранного сотрудника, а не только президента.Этот запрос ниже является жестко закодированным подходом.
select P.staff_name [Level1],
P.job_title [Level1 Title],
Q.license_number [License 1],
E.staff_name [Level2],
E.job_title [Level2 Title],
G.staff_name [Level3],
G.job_title [Level3 Title]
from staff_view A
left join staff_site_link_expanded_view P on P.people_id = A.people_id
left join staff_site_link_expanded_view E on E.people_id = C.people_id
left join staff_site_link_expanded_view G on G.people_id = F.people_id
left join facility_view Q on Q.group_profile_id = P.group_profile_id
Спасибо, это наиболее точно соответствовало тому, что мне было нужно.Вот мой запрос CTE ниже:
with Employee_Hierarchy (staff_name, job_title, id_number, billing_staff_credentials_code, site_name, group_profile_id, license_number, region_description, people_id)
as
(
select C.staff_name, C.job_title, C.id_number, C.billing_staff_credentials_code, C.site_name, C.group_profile_id, Q.license_number, R.region_description, A.people_id
from staff_view A
left join staff_site_link_expanded_view C on C.people_id = A.people_id
left join facility_view Q on Q.group_profile_id = C.group_profile_id
left join regions R on R.regions_id = Q.regions_id
where A.last_name = 'kromer'
)
select C.staff_name, C.job_title, C.id_number, C.billing_staff_credentials_code, C.site_name, C.group_profile_id, Q.license_number, R.region_description, A.people_id
from staff_view A
left join staff_site_link_expanded_view C on C.people_id = A.people_id
left join facility_view Q on Q.group_profile_id = C.group_profile_id
left join regions R on R.regions_id = Q.regions_id
WHERE C.STAFF_NAME IS NOT NULL
GROUP BY C.STAFF_NAME, C.job_title, C.id_number, C.billing_staff_credentials_code, C.site_name, C.group_profile_id, Q.license_number, R.region_description, A.people_id
ORDER BY C.STAFF_NAME
Но мне интересно, какова цель "Employee_Hierarchy"?Когда я заменил "staff_view" во внешнем запросе на "Employee_Hierarchy", он вернул только одну запись = "Kromer".Так, когда / где мы можем использовать «Employee_Hierarchy»?