1
我有一个(简化)表:递归CTE与非数字分层数据
OrgName | Hierarchy
---------|------------
Org1 | A
Org2 | AA
Org3 | AB
Org4 | ABA
组织是另一个组织的一个孩子,如果:
- 孩子的长度比大于1父
- 母公司的层次码完全匹配孩子的代码的第一个
LEN(Parent.Hierarchy)
所以在我的表:
- ORG2和Org3是孩子ORG1
- Org4是Org3和孙子的孩子ORG1
我的问题是我怎么写一个递归层次结构找到一个特定组织的所有后代?我读过的所有CTE示例都有连接的数字条件(如Employee.ManagerID = CTE.EmpID
)。这是我到目前为止:
DELCARE @search VARCHARE = 'A'
WITH Org_cte (OrgName, HLevel, RecursionLevel)
AS
(SELECT o.OrgName, o.Hierarchy, 0 as RecursionLevel
FROM OrgTable o
WHERE o.Hierarchy = @search
UNION ALL
SELECT o.OrgName, o.Hierarchy, RecursionLevel + 1
FROM OrgTable o
INNER JOIN Org_cte
ON ???)
SELECT OrgName, HLevel, Recursion FROM Org_cte
我对CTE相当新,感谢您的帮助!
这仅返回“锚”行,我觉得你的东西上,虽然 – SupremeDud 2011-05-11 17:46:26
我要去接受这个因为它使我的答案: INNER JOIN Org_cte ON子(o.hierarchy,1,org_cte.recursionLevel)= org_cte.hlevel 和len(o.hierarchy)= LEN(org_cte.HLevel)+ 1 我也必须从0 – SupremeDud 2011-05-11 17:56:29
@SupremeDud更改锚的RecursionLevel为1:请参阅我的编辑。我们想出了几乎相同的东西;) – 2011-05-11 17:57:26