0

次のデータがあります。

ここに画像の説明を入力

FTSEAllShare をすべてのプリミティブ (Corp1、Corp2、Corp3、Corp4) で表現したいと思います。MemberName を GroupName に SELF JOIN し、結果の MemberName を COALESCE する WHILE ループを作成しましたが、再帰的な 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 に答える