Sql 服务器对 table 中的产品进行分组,具有基于父节点的层级关系

Sql Server grouping products from a table with hierarchical relationship based on parent node

我有一个 table 具有层次关系的产品 - 例如,有一行包含 5 公斤苹果的苹果袋和一个包含 1 公斤苹果的子行)。这种关系如下所示:

Id   ContainsId      Name

8792    4567     Bag - 5kg apples
4567    NULL        1 kg apples

我需要的是对每个层次结构系列的产品进行分组,以便我可以将它们显示在彼此相邻的列表中。结果应如下所示:

 FamilyId   Id        Name
   8792    8792   Bag - 5kg apples
   8792    4567   1kg apples

一个家庭可以有两个以上的成员。

你能帮帮我吗?

使用递归 CTE,这可以像这样完成

DECLARE @tbl TABLE (Id INT, ContainsId INT, [Name] NVARCHAR(100))
INSERT INTO @tbl
(Id, ContainsId, [Name])
VALUES
(8792,4567,'Bag - 5kg apples')
,(4567,5555,'1 kg apples')
,(5555,7878,'Some Oranges') --Added some extra items
,(7878,NULL,'Fish Fingers') --Added some extra items

;WITH cteX
AS
(   SELECT
        T.Id, T.ContainsId,  T.[Name], FamilyId = T.Id
    FROM
        @tbl    T
    WHERE
        T.Id = 8792
    UNION ALL
    SELECT
          T1.Id
        , T1.ContainsId
        , T1.[Name]
        , R.FamilyId
    FROM
        @tbl        T1
    INNER JOIN
        cteX        R ON    R.ContainsId = T1.Id
)
SELECT T.FamilyId
     , T.Id
     , T.Name
FROM cteX T

输出

FamilyId    Id      Name
8792        8792    Bag - 5kg apples
8792        4567    1 kg apples
8792        5555    Some Oranges
8792        7878    Fish Fingers