使用SQL(Teradata)为树创建物化路径 我在一个表中给出了一个组织树,它是“自上而下”排序的(从父级到子级)。每个实例的级别也作为属性提供数据结构示例: 指数 雇员姓名 雇员级别 1. 迈克尔 1. 2. 帕姆 2. 3. 吉姆 2. 4. 德怀特 3. 5. 安吉拉 1.

使用SQL(Teradata)为树创建物化路径 我在一个表中给出了一个组织树,它是“自上而下”排序的(从父级到子级)。每个实例的级别也作为属性提供数据结构示例: 指数 雇员姓名 雇员级别 1. 迈克尔 1. 2. 帕姆 2. 3. 吉姆 2. 4. 德怀特 3. 5. 安吉拉 1.,sql,recursion,tree,teradata,Sql,Recursion,Tree,Teradata,这将使您成为家长: select t.*, ( select max(index) from tab as t2 where t2.index < t.index and t2.Employee_level < t.Employee_level ) as parent_idx from tab as t 你怎么知道吉姆是德怀特的父母而不是帕姆?仅基于索引?是的,基于索引。这个表有多大?是否有已知的最大级别?大约6400行和10级。这非常有效!谢

这将使您成为家长:

select t.*,
 (
   select max(index) 
   from tab as t2 
   where t2.index < t.index 
     and t2.Employee_level < t.Employee_level
 ) as parent_idx
from tab as t

你怎么知道吉姆是德怀特的父母而不是帕姆?仅基于
索引
?是的,基于索引。这个表有多大?是否有已知的最大级别?大约6400行和10级。这非常有效!谢谢你,诺思!
WITH RECURSIVE cte AS
 ( -- traverse the hierarchy and built the path
   SELECT idx, parent_idx, Employee_level, Employee_name
     ,Cast(Employee_name AS VARCHAR(500)) AS Path -- must be large enough for concatenating all levels
   FROM mytab
   WHERE Employee_level = 1

   UNION ALL

   SELECT t.idx, t.parent_idx, t.Employee_level, t.Employee_name 
     ,cte.Path || ',' || Trim(t.Employee_name)   
   FROM cte JOIN mytab AS t
   ON cte.idx = t.parent_idx
)
select * from cte 
order by idx
;