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
我有一个 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