我有一个分层的SQL语句,它向我展示了产品组件的分层列表。例如:部件1101400004包含部件1012444.部件1012444包含B30048。对于每个组件,我有一个数量。
现在我的问题是:是否有可能将价值传递给孩子?
因此,当部件1101400004具有QTY 0时,无论QTY部件1012444具有什么,它都应该为0,因为父部件具有QTY零。而这个逻辑在树的底部。
select part_no, component_part, qty_per_assembly
FROM STRUCTURE MS
CONNECT BY PRIOR MS.COMPONENT_PART = MS.PART_NO
START WITH MS.PART_NO = '1101400004'
结果
寻求帮助
答案 0 :(得分:0)
从Oracle 10g版开始,您可以使用CONNECT_BY_ROOT
伪列,如下所示:
select part_no, component_part, connect_by_root qty_per_assembly
FROM STRUCTURE MS
CONNECT BY PRIOR MS.COMPONENT_PART = MS.PART_NO
START WITH MS.PART_NO = '1101400004'
请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm#i2069380
答案 1 :(得分:0)
根据我的理解,如果所有的阵营都不相等,那么你需要从 qty_per_assembly 获得数量" 0"和" 0"如果至少有一个前任是等于" 0"。为了解决这个问题,您可以使用connect_by_root(component_part)和analytic MIN的组合。如果我错了,请纠正我
select part_no, component_part, DECODE(MIN(qty_per_assembly) OVER (PARTITION BY connect_by_root(component_part) ORDER BY level)
, 0
, 0
, qty_per_assembly)
FROM STRUCTURE MS
CONNECT BY PRIOR MS.COMPONENT_PART = MS.PART_NO
START WITH MS.PART_NO = '1101400004'
编辑:connect_by_root(qty_per_assembly)更改为connect_by_root(component_part)