У меня есть (упрощенная) таблица:
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, спасибо за помощь!