我有以下数据:
我想用其所有原语(即Corp1,Corp2,Corp3,Corp4)来表达FTSEAllShare。 我写了一个WHILE循环,重复SELF将MemberName连接到GroupName并COALESCEs生成的MemberName,但我一直在阅读递归CTE,并认为它们可能提供了一种更简单的方法。
我对递归代码并不擅长,每次尝试时我都会感到困惑。
有人可以帮我解决这个问题,并建议我如何使用递归CTE来表达FTSEAllShare的4个基元?
亲切的问候
答案 0 :(得分:1)
像这样:
WITH CTE
AS
(
SELECT GroupName, MemberName, 0 AS Level
FROM GroupsMembers
WHERE GroupName = 'FRSEAllShare'
UNION ALL
SELECT g.*, c.level + 1
FROM CTE c
INNER JOIN GroupsMembers g ON c.MemberName = g.GroupName
)
SELECT *
FROM CTE;
这将为您提供属于组FRSEAllShare
或其任何孙组的所有成员,并使用新列level
按级别选择它们。