Mat*_*att 2 sql sql-server hierarchical-data sql-server-2008
假设我有下表
SectionID ParentIDSection DatumID
1 NULL 1
2 1 2
3 1 3
4 2 4
Run Code Online (Sandbox Code Playgroud)
现在,让我假装我想选择SectionID = 1下的所有DatumID,即使它是它的后代孩子的一部分,所以我会得到
SectionID DatumID
1 1
1 2
1 3
1 4
Run Code Online (Sandbox Code Playgroud)
是否有可能在没有用游标递归地迭代第一个表的情况下?
这让我困惑了一分钟,因为它与我对递归的看法有相反的方向,但我想出了这个非常简单的解决方案:
;WITH Rollups AS (
SELECT SectionId, ParentIdSection, DatumId
FROM SectionDataTable
UNION ALL
SELECT parent.SectionId, parent.ParentIdSection, child.DatumId
FROM SectionDataTable parent
INNER JOIN Rollups child ON child.ParentIdSection = parent.SectionId
)
SELECT *
FROM Rollups
WHERE SectionID = 1
Run Code Online (Sandbox Code Playgroud)
(替换为您想要的部分ID)