我有一个有趣的 SQL 问题。我有一个构成物料清单的零件层次结构表。与此类似:
ASSEMBLY
---------
parent_part_id
part_id
quantity
我通过这样的查询得到了这个结构的层次结构:
SELECT level, part_id, quantity
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id;
输出可能如下所示:
level part_id quantity
----- ------- ---------
1 2 2
2 3 10
1 4 2
2 5 1
3 3 5
到目前为止,一切都很好。
问题是这样的:我如何计算制作顶级装配所需的每个零件的总数(第 1 部分)?
按部件对结果集进行分组并对数量求和是不正确的,因为数量应乘以层次结构中当前部件正上方的部件数量,递归地向上遍历树。
我认为这是一个 LAG 功能,但无法将其可视化。
编辑:预期结果:
part_id quantity
------- --------
2 2
3 30
4 2
5 2
更多编辑:我通过这个查询得到了有趣的结果
SELECT rownum, level lvl, part_id, quantity, unit_of_measure
, connect_by_isleaf || sys_connect_by_path(quantity,'*') math
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id
数学列返回我要执行的计算的字符串表示形式:) 例如它可能会说:
1*1*2*10
或类似和适当的东西......也许制作一个函数来解析它并返回结果将解决问题......有人认为这很离谱吗?