2016-10-13 7 views
0

У меня есть иерархический оператор SQL, который показывает мне иерархический список компонентов продукта. Например: Часть 1101400004 содержит часть 1012444. А часть 1012444 содержит B30048. Для каждого компонента у меня есть Qty.Иерархическое соединение по значению пересылки для детей

Теперь мой вопрос: возможно ли передать детям значение?

Так что, когда у части 1101400004 есть QTY 0, независимо от того, что QTY Part 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

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 с условием? Моя проблема в том, что я хочу передать значение дочерним элементам, если qty равно 0. Если qty не равно 0, я хочу видеть конкретное количество дочернего элемента. – weegli

0

Как я понимаю, вам нужно получить количество от qty_per_assembly, если все пренты не равны «0» и «0», если хотя бы один предшественник равен «0». Для его решения вы можете использовать combition 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' 

EDIT: connect_by_root (qty_per_assembly) изменение connect_by_root (component_part)

+0

Спасибо за ваш ответ. Но он не работает, как должен. Родитель «1101400004» имеет ребенка «W41620» с QTY 1 – weegli

+0

И у W41620 есть ребенок B2345 с QTY 1, но выбор показывает теперь 0. – weegli

+0

О, извините, я ошибаюсь 'connect_by_root (qty_per_assembly)' должно быть 'connect_by_root (component_part) ' –