如何在雪花中創建遞歸聯接

我有一個帶有一堆左聯接的查詢,以獲取員工經理的層次列表。我知道雪花有一個遞歸功能,但在以下方面有困難。有人知道這樣的東西是如何遞歸編寫的嗎?

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:

with cte as (
  select
    employee_id as employee,
    employee_name,
    employee_id1 as manager,
    manager_name,
    CAST(employee_id AS VARCHAR(500)) as path,
    1 as depth
  from employees
  where employee_id1 IS NULL
  
  union all

  select
    employee.employee_id,
    employee.employee_name,
    employee.employee_id1,
    employee.manager_name,
    cte.path || '>' || employee.employee_id,
    cte.depth + 1
  from employees
  join cte
  on employee.employee_id = cte.employee_id1
)
select * from cte

現在,您有了該員工的完整路徑以及該員工的深度,這應該會有很大幫助。

主站蜘蛛池模板: 在线观看国产区亚洲一区成人 | 久久久精品日本一区二区三区| 怡红院AV一区二区三区| 视频一区二区中文字幕| 国内精品视频一区二区八戒| 射精专区一区二区朝鲜| 中文字幕亚洲乱码熟女一区二区 | 一区二区三区高清视频在线观看| 国产成人精品久久一区二区三区| 国产一区二区精品| 中文日韩字幕一区在线观看| 亚洲国模精品一区| 欧洲精品码一区二区三区免费看| 精品国产一区二区麻豆| 亚洲日本va一区二区三区| 日韩精品无码免费一区二区三区| 国产一区二区免费视频| 国产一区二区三区高清视频| 精品国产香蕉伊思人在线在线亚洲一区二区 | 成人无码精品一区二区三区| 在线欧美精品一区二区三区| 国产福利91精品一区二区| AA区一区二区三无码精片| 精品午夜福利无人区乱码一区| 色婷婷一区二区三区四区成人网| 久久精品黄AA片一区二区三区| 无码精品国产一区二区三区免费| 久久青草精品一区二区三区| 亚洲一区中文字幕久久| 免费播放一区二区三区| 成人免费观看一区二区| 日韩成人无码一区二区三区| 日韩一区二区三区不卡视频| 日美欧韩一区二去三区| 一区二区三区福利| 亚洲综合色自拍一区| 3d动漫精品啪啪一区二区免费| 亚洲综合无码一区二区痴汉| 精品成人一区二区三区免费视频 | 国产麻豆媒一区一区二区三区| 亚洲Av高清一区二区三区|