0

我有两个表如下SQL Server 2008的父子表使用CTE与其他数据

Group 
Id, Name,  ParentId 
1, North,  NULL 
2, South,  NULL 
3, London,  2 
4, Brighton, 2 
5, Fulham,  3 
6, SuperStores, NULL 

StoreAndGroup 
Id, StoreId,  GroupId 
1, 41,   2 
2, 52,   3 
3, 88,   5 
4, 88,   6 
5, 41,   6 

我想制作一个表格,显示属于每个组的所有门店(包括亚组),所以上述将成为

GroupId, StoreId 
2,  41 
2,  52 
2,  88 
3,  52 
3,  88 
5,  88 
6,  88 
6,  41 

我可以使用递归CTE给我看一个特定组的所有孩子,但我有点坚持以如何把额外的数据。

回答

0

其实这原来是一个简单连接

WITH 
    cteGroups (Id, GroupName, ParentGroupId, GroupLevel) 
    AS 
    (
    SELECT Id, GroupName, ParentGroupId 
    FROM Dim_Group 
    UNION ALL 
    SELECT g.Id, g.GroupName, g.ParentGroupId 
    FROM Dim_Group g 
     INNER JOIN cteGroups cg 
     ON g.ParentGroupId = cg.Id 
) 

    select * from cteGroups inner join dim_groupmember on cteGroups.Id = dim_groupmember.groupid 

达伦

0

也许你可以这样做:

SELECT GroupId, StoreId 
FROM StoresAndGroup 
UNION ALL 
SELECT ParentId AS GroupId, StoreId 
FROM StoresAndGroup s INNER JOIN [Group] g ON g.GroupId = s.GroupId 
WHERE g.ParentId IS NOT NULL