递归CTE以获取组的成员

时间:2013-01-30 08:01:57

标签: sql sql-server tsql common-table-expression recursive-query

我有以下数据:

enter image description here

我想用其所有原语(即Corp1,Corp2,Corp3,Corp4)来表达FTSEAllShare。 我写了一个WHILE循环,重复SELF将MemberName连接到GroupName并COALESCEs生成的MemberName,但我一直在阅读递归CTE,并认为它们可能提供了一种更简单的方法。

我对递归代码并不擅长,每次尝试时我都会感到困惑。

有人可以帮我解决这个问题,并建议我如何使用递归CTE来表达FTSEAllShare的4个基元?

亲切的问候

1 个答案:

答案 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;

Live Demo

这将为您提供属于组FRSEAllShare或其任何孙组的所有成员,并使用新列level按级别选择它们。