Необходимо рассчитать количество родителей для расчета общего количества - PullRequest
0 голосов
/ 30 мая 2018

Заранее благодарим за любую помощь, которую вы можете оказать.Я потратил на это часы безуспешно.

Я работаю с таблицей с отступами, у которой есть идентификатор конечной части, порядковый номер, уровень и количество.Цель состоит в том, чтобы определить суммарное суммарное количество каждой строки в этой таблице.

Что затрудняет то, что для определения общего количества дочернее количество необходимо умножить на его родительское количество.Родительское количество этого родителя должно быть умножено на его родительское количество и т. Д.

Например, часть уровня 3 имеет количество компонента 5. Это родительская часть уровня 2 имеет количество компонента 2Родитель, часть уровня 1 имеет количество компонента 3. Это означает, что общее количество части уровня 3 равно 30 (3 X 2 X 5).

С помощью SO (в частности, @KKK) родительское количество было рассчитано в следующем запросе.После того, как это было решено, я понял, что теперь мне нужны два дополнительных столбца, один из которых отображает скрученные / накопленные количества родительских строк, а другой - общее количество дочерних элементов.

Прикрепленный снимок экрана содержит два столбца, которыедолжны быть добавлены выделены желтым цветом.Вот текущий SQL (с использованием Oracle 10.2) для столбцов, которые не выделены желтым цветом:

select 
    end_part_id, sort_seq_no, indented_lvl, comp_qty,
    (select distinct first_value(a.comp_qty) over (order by a.sort_seq_no desc, TRIM(a.indented_lvl) desc)
from 
    report_table a
where  
    a.end_part_id = b.end_part_id
    and a.sort_seq_no < b.sort_seq_no
    and TRIM(a.indented_lvl) < TRIM(b.indented_lvl)) as "PARENT_QTY"
from report_table b

Ожидаемые результаты

END_PART_ID SORT_SEQ_NO INDENTED_LVL    COMP_QTY    PARENT_QTY  ROLLED_PARENT QTY   TOTAL_QTY
PARTX       1           1                   2       1           1                   2
PARTX       2            2                  5       2           2                   10
PARTX       3             3                 2       5           10                  20
PARTX       4              4                1       2           20                  20
PARTX       5               5               1       1           20                  20
PARTX       6                6              1       1           20                  20
PARTX       7               5               4       1           20                  80
PARTX       8                6              1       4           80                  80
PARTX       9            2                  7       2           2                   14
PARTX       10            3                 2       7           14                  28
PARTX       11            3                 2       7           14                  28
PARTX       12             4                1       2           28                  28
PARTX       13             4                1       2           28                  28
PARTX       14            3                 8       7           14                  112
PARTX       15          1                   1       1           1                   1
PARTX       16           2                  7       1           1                   7
PARTX       17            3                 2       7           7                   14
PARTX       18            3                 2       7           7                   14
PARTX       19             4                1       2           14                  14
PARTX       20             4                1       2           14                  14
...