如何按层级顺序提取BOMHierarchy表的多级层级数据?
深度优先遍历BOM层级解决方案
要实现你需要的深度优先遍历BOM层级顺序(先完整遍历一个分支再处理同层级其他节点),可以借助递归CTE生成层级路径,通过路径排序来达到预期效果。以下是具体SQL实现:
WITH BOMRecursive AS ( -- 锚点:筛选根节点(这里自动识别无父节点的根,若根节点固定可直接写WHERE Parent = 'Parent1') SELECT Parent, Child, CAST('/' + Parent + '/' + Child AS VARCHAR(MAX)) AS HierarchyPath FROM BOMHierarchy WHERE Parent NOT IN (SELECT Child FROM BOMHierarchy) UNION ALL -- 递归:遍历所有子节点并拼接层级路径 SELECT bh.Parent, bh.Child, br.HierarchyPath + '/' + bh.Child AS HierarchyPath FROM BOMHierarchy bh INNER JOIN BOMRecursive br ON bh.Parent = br.Child ) -- 按层级路径排序,实现深度优先遍历 SELECT Parent, Child FROM BOMRecursive ORDER BY HierarchyPath;
逻辑说明
- 层级路径生成:递归过程中为每个节点拼接完整的层级路径(如
/Parent1/Child1/Child3),路径的结构直接反映了节点的层级关系。 - 深度优先排序:按
HierarchyPath排序时,会优先遍历同一父节点下的完整分支,再回溯处理同层级的其他节点,完全匹配你期望的输出顺序。
如果之前使用CTE未得到正确结果,大概率是缺少了用于控制深度优先顺序的路径排序字段,常规递归默认不会自动按深度优先排列。
内容的提问来源于stack exchange,提问作者Kantarkatax
相关产品推荐
相关产品推荐

