• So after gleaning that this problem may be solved by a recursive CTE I landed here.

    http://stackoverflow.com/questions/6224564/flattening-out-a-group-membership-tree-in-sql-with-cyclic-references

    The following seems to work. I am still studying this solution since it is on the edge of my understanding.

    DECLARE @GroupCode varchar(20)

    SET @GroupCode = 'E'

    ;WITH Members AS

    (

    --Anchor

    SELECT

    GroupCode,

    Member,

    0 As isCycle,

    '.' + CAST(Member As varchar(max)) + '.' As [path]

    FROM dbo.GroupMembers

    WHERE

    Member NOT IN (Select GroupCode from GroupMembers)

    UNION ALL

    --Recursive call

    SELECT

    h.GroupCode,

    h.Member,

    CASE WHEN m.[path] like '%.' + CAST(h.Member as varchar(max)) + '.%' THEN 1 ELSE 0 END As isCycle,

    m.[path] + CAST(h.Member as varchar(max)) + '.' As [path]

    FROM GroupMembers h

    INNER JOIN Members m

    ON h.member = m.GroupCode

    WHERE

    isCycle = 0

    )

    SELECT

    LEFT(REPLACE(path,'.',''),1) AS Member,

    *

    FROM

    Members

    WHERE

    Members.isCycle = 0 AND

    @GroupCode = GroupCode