我之前问过非常相似的问题,但仍未达到正确的结果……魅力的三倍,但我现在有一个稳定的亲子关系可以使用。
多级数据集中的每一行都有成本。对于特定的行,我需要找到最低级别并汇总成本。然后,我的用户将汇总的成本与行成本进行比较,并在发现差异时进行故障排除。
数据样本:
MODEL_NO MODEL_REV P_SEQ_NO SEQ_NO UNIT_COST QTY LEVEL TREE_PATH ISLEAF
1000 1 100 300 8889 1 1 >300 0
1000 1 300 400 1701 1 2 >300>400 1
1000 1 300 500 970 1 2 >300>500 1
1000 1 300 600 7 2 2 >300>600 1
1000 1 300 700 1160 1 2 >300>700 1
1000 1 300 800 580 1 2 >300>800 1
1000 1 300 900 96 1 2 >300>900 1
1000 1 300 1000 350 1 2 >300>1000 1
1000 1 300 1100 59 4 2 >300>1100 0
1000 1 1100 1200 28 1 3 >300>1100>1200 1
1000 1 1100 1300 1 1 3 >300>1100>1300 1
1000 1 1100 1400 3 1 3 >300>1100>1400 1
1000 1 1100 1500 4 1 3 >300>1100>1500 1
1000 1 1100 1600 22 1 3 >300>1100>1600 1
我正在根据数据集中的特定行(MODEL_NO
,MODEL_REV
,P_SEQ_NO
,SEQ_NO
创建唯一键)来寻找函数或SQL语句,这将返回费用汇总。
例如:根据以下记录:1000, 1, 300, 1100
,我希望得到以下结果:232
。
这是通过将每个最低级别子项的UNIT_COST
乘以它的QTY
,然后将每个子项的总和相加,然后将结果乘以父级的QTY
来计算的,重复最后一步直到输入的每个记录,在这种情况下为SEQ_NO = 1100
。
结果工作方式:(22*1 + 4*1 + 3*1 + 1*1 + 28*1) *4
此示例只有1级深度,我的数据可以达到6/7级深度。
您具有路径,因此不需要递归CTE或分层查询。
我认为您想要:
select sum(t.qty * (tx.qty * tx.price))
from prod_cost_model_struct_tab t join
(select t.*
from prod_cost_model_struct_tab t
where MODEL_NO = 1000 and MODEL_REV = 1 and P_SEQ_NO = 1100 and SEQ_NO = 3
) tx
on tx.path like t.path || '>%';