У меня есть интересная проблема SQL. У меня есть иерархическая таблица частей, которые составляют спецификацию. похожее на это:Помогите рассчитать сложную сумму в иерархическом наборе данных
ASSEMBLY
---------
parent_part_id
part_id
quantity
Я получаю иерархию этой структуры с помощью запроса, как это:
SELECT level, part_id, quantity
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id;
вывод может выглядеть следующим образом:
level part_id quantity
----- ------- ---------
1 2 2
2 3 10
1 4 2
2 5 1
3 3 5
до сих пор так хорошо.
вопрос в следующем: как рассчитать общее количество каждой детали, необходимой для сборки верхнего уровня (часть 1)?
Группировка этого результата по частям и суммирование количества неверны, так как количество должно быть умножено на количество части, непосредственно над текущей частью иерархии, рекурсивно вверх по дереву.
Я думаю, что это функция LAG, но у нее проблемы с ее визуализацией.
редактировать: Ожидаемые результаты:
part_id quantity
------- --------
2 2
3 30
4 2
5 2
более
редактировать: я получить интересные результаты с этим запросом
SELECT rownum, level lvl, part_id, quantity, unit_of_measure
, connect_by_isleaf || sys_connect_by_path(quantity,'*') math
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id
столбец математики возвращает строковое представление расчета я хочу выполнить :) для например, можно сказать:
1*1*2*10
или что-то подобное и подходящее ... возможно, создавая функцию для синтаксического анализа этого и возврата результата, решит проблему. Кто-нибудь считает, что это возмутительно?
Мне очень жаль, но я не понимаю, вопрос * Как рассчитать общее количество каждой необходимой для того, чтобы сделать сборку верхнего уровня (часть 1) * и на соответствующую записку , как вы получаете ожидаемый результат. –
@Rene - часть 1 является исходной parent_part_id, которая создает первые результаты хирархии. если мы посмотрим на эти результаты, то заметим, что нам нужно 2 части_и_2, каждая из которых нуждается в 10 части_и_3 - эта ветвь вносит 20 в общую сумму для части 3, позже аналогичным образом требуется еще 10 часть 3, в общей сложности 30 – Randy