Родительская дочерняя таблица SQL Server 2008 с использованием cte с дополнительными данными - PullRequest
0 голосов
/ 18 декабря 2011

У меня есть две таблицы следующим образом:

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, чтобы показать мне всех детей определенной группы, но я немного застрял в том, как включить дополнительные данные.

Ответы [ 2 ]

0 голосов
/ 05 января 2012

На самом деле это было простое соединение

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 голосов
/ 18 декабря 2011

Может быть, вы можете сделать это:

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
...