按顺序连接到子级的连接值

时间:2016-10-13 06:43:21

标签: sql oracle hierarchical-data recursive-query connect-by

我有一个分层的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'

结果

enter image description here

寻求帮助

2 个答案:

答案 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)