我有一個帶有一堆左聯接的查詢,以獲取員工經理的層次列表。我知道雪花有一個遞歸功能,但在以下方面有困難。有人知道這樣的東西是如何遞歸編寫的嗎?
select
d1.employee_id,
d1.employee_id1,
d1.employee_id2,
d1.employee_id3,
d2.employee_id1 as employee_id4,
d2.manager_name as employee_id4_name,
d3.employee_id1 as employee_id5,
d3.manager_name as employee_id5_name,
d4.employee_id1 as employee_id6,
d4.manager_name as employee_id6_name,
d5.employee_id1 as employee_id7,
d5.manager_name as employee_id7_name
from employees d1
left join employees d2
on d1.employee_id3 = d2.employee_id
and d1.report_effective_date = d2.report_effective_date
left join employees d3
on d2.employee_id1 = d3.employee_id
and d2.report_effective_date = d3.report_effective_date
left join employees d4
on d3.employee_id1 = d4.employee_id
and d3.report_effective_date = d4.report_effective_date
left join employees d5
on d4.employee_id1 = d5.employee_id
and d4.report_effective_date = d5.report_effective_date
用我嘗試過的內容進行編輯-據我所知,我想要的格式化方式似乎不可能?我希望得到一個人的經理層次結構,但每個經理都在一個新的專欄中。
我嘗試的是這樣的,但它會以行為單位提供層次結構,并要求我有一個篩選到某人的錨定查詢。
with cte as (
select
employee_id,
employee_name,
employee_id1,
manager_name
from employees
where employee_name = <name>
union all
select
employee.employee_id,
employee.employee_name,
employee.employee_id1,
employee.manager_name
from employees
join cte
on employee.employee_id = cte.employee_id1
)
select * from cte
正確的做法是返回行而不是列。同樣正確的是,您需要將查詢錨定在某人或某個組上??紤]一下,作為一名錨,一名沒有分配employee_id 1的員工(如果我了解你的數據,他是組織中排名第一的人)。
至于“行中數據”,請考慮構建一個分層路徑,可以將其拆分為數組或what-have-you:
現在,您有了該員工的完整路徑以及該員工的深度,這應該會有很大幫助。