2016-10-13 19 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)' –