需要滚动父数量来计算总数量

时间:2018-05-29 22:10:36

标签: sql oracle oracle10g parent-child

提前感谢您提供的任何帮助。我花了好几个小时没有运气。

我正在使用缩进的物料清单表,其中包含结束部件ID,序列号,级别和数量。目标是确定此表中每行的累计总量。

使这一点变得困难的是,要确定总数量,需要将子数量乘以其父数量。该父母的父母数量需要乘以父母的数量,依此类推。

例如,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

Expected Results

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

0 个答案:

没有答案