2016-10-13 135 views
0

我有一个分层的SQL语句,它显示了产品组件的分层列表。例如:部分1101400004包含部分1012444.而部分1012444包含B30048。对于每个组件,我都有一个数量。通过将值传递给儿童进行分层连接

现在我的问题是:是否有可能将值传递给孩子?

因此,当零件1101400004的数量为0时,不管零件数量为1012444有多少,它应该为0,因为零件的零件数量为零。而这个逻辑到了树的底部。

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

THX的帮助

回答

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

+0

THX你的答案。 – weegli

+0

Thx为您的答案。有没有可能将该connect_by_root绑定到一个条件?我的问题是,如果数量为0,我只想将值传递给孩子。如果数量不是0,我想查看孩子的具体数量。 – weegli

0

据我所知,如果至少有一个前辈等于“0”,如果所有prents不等于“0”和“0”,您需要从qty_per_assembly获取数量。为了解决它,你可以使用connect_by_root(component_part)和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 CONNECT_BY_ROOT(qty_per_assembly)变化(component_part)

+0

谢谢你的回答。但它并不像它应该那样工作。父母“1101400004”有一个孩子“W41620”与数量1 – weegli

+0

和W41620有孩子B2345与数量1但选择显示现在0. – weegli

+0

哦,对不起,我犯了一个错误'connect_by_root(qty_per_assembly)'应该'connect_by_root (component_part)' –