【发布时间】:2011-05-11 17:34:20
【问题描述】:
我有一个(简化的)表格:
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 的新手,感谢您的帮助!
【问题讨论】:
标签: sql-server-2005 tsql recursion common-table-expression