使用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
;