求可汇总多层装配结构零件总数量的ParentChild表SQL查询语句
解决方案
通用递归CTE方案(支持PostgreSQL、MySQL 8.0+、SQL Server 2008+等)
利用递归公共表表达式(CTE)遍历整个装配树,逐层计算零件的累计数量:
WITH RECURSIVE assembly_tree AS ( -- 锚点:获取根装配体A1的直接子项 SELECT Parent, Child, Quantity AS total_qty FROM ParentChild WHERE Parent = 'A1' UNION ALL -- 递归遍历子装配体,累计计算数量 SELECT pc.Parent, pc.Child, at.total_qty * pc.Quantity AS total_qty FROM assembly_tree at JOIN ParentChild pc ON at.Child = pc.Parent ) -- 筛选零件并汇总总数量,格式化输出 SELECT CONCAT(SUM(total_qty), 'x ', Child) AS part_summary FROM assembly_tree WHERE Child LIKE 'P%' GROUP BY Child ORDER BY Child;
逻辑说明
- 锚点成员:先取出A1的直接子节点,初始数量为表中记录的
Quantity。 - 递归成员:将已遍历到的装配体作为父节点,关联其下的子项,通过
父节点累计数量 × 当前子项数量计算出子项的累计数量,直到遍历完所有层级。 - 最终汇总:筛选出所有零件(通过
Child LIKE 'P%'判断),按零件分组求和,格式化为数量x 零件名的样式。
执行结果
运行上述查询后,会得到符合预期的结果:
part_summary ------------ 8x P1 1x P2 2x P3
内容的提问来源于stack exchange,提问作者Volker
相关产品推荐
相关产品推荐

