グループ、メンバーシップ、人物、属性の 4 つのテーブルがあります。
グループ
GroupID
GroupName
ParentGroupID
メンバーシップ
PersonID
GroupID
人
PersonID
Name
属性
AttributeID
GroupID
Value
属性はグループに割り当てられ、グループにはメンバーシップ テーブルを介して人が割り当てられます。
特定の人に関連するすべての属性を表示したいと思います。
親のいないグループの誰かに対してこれを行うのに問題はありませんが、一部のグループは 2 または 3 レベルの深さでネストされています。CTE アプローチを使用しようとする私の試みは、これまでのところ何の結果も得ていません。
例の結果
Person.Name Membership.GroupID Group.GroupID Group.ParentGroupID Attribute.Value
Fred 3 1 NULL 'Attribute for Top level group'
Fred 3 2 1 'Attribute for a sub group'
Fred 3 3 2 'Attribute for third sub group'
Fred 5 4 1 'Attribute for Top level group - this is a duplicate?'
Fred 5 5 4 'Attribute for second sub group'
それが十分に明確であることを願っています。Fred はグループ 3 のメンバーであり、2 の親グループがあり、さらに 3 の親グループがあります。次に、各グループに一致する各属性を表示します (Attribute.GroupID に対する Group.ID の内部結合がこれを実現します)。 )
編集 - メモを追加するだけで、各人物は複数のグループのメンバーになることができます。