2016-10-13 3 views
0

제품의 구성 요소 계층 구조 목록을 보여주는 계층 적 SQL 문이 있습니다. 예 : 부품 1101400004는 부품 1012444를 포함하고 부품 1012444는 B30048을 포함합니다. 각 구성 요소에는 수량이 있습니다.계층 적 연결 값으로 자식에게

내 질문은 : 아이들에게 가치를 전달하는 것이 가능한가?

따라서 파트 1101400004의 QTY가 0 인 경우 파트 1012444의 QTY 수량에 관계없이 상위 파트의 QTY가 0이므로 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

당신이 CONNECT_BY_ROOT 의사 열이처럼 사용할 수있는 Oracle 버전 10g의 도움

답변

0

에 대한 들으 :

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

들으. – weegli

+0

당신의 대답은 Thx입니다. 해당 connect_by_root를 조건에 바인딩 할 수 있습니까? 내 문제는, 만약 그 수량이 0이라면 그 값을 차일드에 전달하기를 원할뿐입니다. 만약 그 수량이 0이 아니라면, 그 아이의 특정 수량을보고 싶습니다. – weegli

0

적어도 하나의 선행자가 "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에 connect_by_root (qty_per_assembly)의 변화 (component_part) 답변에 대한

+0

답변 해 주셔서 감사합니다. 그러나 그것 같이 일하지 않는 것은해야한다. 부모 "1101400004"는 1TY를 가진 자식 "W41620"을 가지고 있습니다. – weegli

+0

그리고 W41620은 1을 가진 자식 B2345를가집니다. 그러나 선택은 이제 0을 보여줍니다. – weegli

+0

오, 죄송합니다. 실수로'connect_by_root (qty_per_assembly)'는'connect_by_root (component_part)' –