【问题标题】:Recursive CTE to get members of a group递归 CTE 以获取组的成员
【发布时间】:2013-01-30 08:01:56
【问题描述】:
我有以下数据:
我想用它的所有原语(即 Corp1、Cor2、Corp3、Cor4)来表达 FTSEAllShare。
我编写了一个 WHILE 循环,它反复将 MemberName 加入到 GroupName 并 COALESCE 生成 MemberName,但我一直在阅读有关递归 CTE 的文章,并认为它们可能提供了一种更简单的方法。
我不擅长递归代码,每次尝试都会感到困惑。
有人可以帮我解决这个问题并建议我如何使用递归 CTE 来表达 FTSEAllShare 的 4 个原语吗?
亲切的问候
【问题讨论】:
标签:
sql
sql-server
tsql
common-table-expression
recursive-query
【解决方案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 以按级别选择它们。