0

我有以下数据:

在此处输入图像描述

我想用它的所有原语(即Corp1、Corp2、Corp3、Corp4)来表达FTSEAllShare。我编写了一个 WHILE 循环,该循环反复将 MemberName 加入到 GroupName 并 COALESCE 生成 MemberName,但我一直在阅读有关递归 CTE 的内容,并认为它们可能会提供一种更简单的方法。

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

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

亲切的问候

4

1 回答 1

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以按级别选择它们。

于 2013-01-30T08:14:54.660 回答