17,086
社区成员
发帖
与我相关
我的任务
分享
WITH t1 AS (
SELECT 'BP127-01'HMAT FROM dual UNION ALL
SELECT 'BP127-10' FROM dual
),t2 AS (
SELECT 'BP127-01'HMAT,'71(2426K)'CHLVHMAT,90 QTY FROM dual UNION ALL
SELECT 'BP127-01'HMAT,'BP127-10'CHLVHMAT,10 QTY FROM dual UNION ALL
SELECT 'BP127-10'HMAT,'127'CHLVHMAT,10 QTY FROM dual UNION ALL
SELECT 'BP127-10'HMAT,'24-1'CHLVHMAT,30 QTY FROM dual UNION ALL
SELECT 'BP127-10'HMAT,'71(2426K)'CHLVHMAT,60 QTY FROM dual
)
SELECT chlvhmat,Sum(urqunty)urqunty FROM (
SELECT chlvhmat,hmat,connect_by_isleaf flag,Decode(LEVEL,'1',urqunty/Sum(urqunty) over (PARTITION BY LEVEL ORDER BY LEVEL),(connect_by_root urqunty/(Sum(urqunty) over (PARTITION BY LEVEL-1 ORDER BY LEVEL)))*urqunty/Sum(urqunty) over (PARTITION BY LEVEL ORDER BY LEVEL)) urqunty
FROM (SELECT t1.hmat,t2.chlvhmat,t2.qty urqunty FROM t1,t2 WHERE t1.hmat=t2.hmat)
START WITH hmat='BP127-01'
CONNECT BY PRIOR chlvhmat=hmat
)WHERE flag=1 GROUP BY chlvhmat
ORDER BY chlvhmat;
SQL> SELECT * FROM material;
HMAT CHLVHMAT QTY
-------------------- -------------------- ----------
BP127-01 71(2426K) 90
BP127-01 BP127-10 10
BP127-10 127 10
BP127-10 24-1 30
BP127-10 71(2426K) 60
127 24-1 50
127 71(2426K) 50
7 rows selected
SQL>
SQL> SELECT chlvhmat, SUM(rate)
2 FROM (SELECT hmat, chlvhmat, qty, LEVEL, qty / power(10, 1 + LEVEL) rate
3 FROM material
4 WHERE connect_by_isleaf = 1
5 START WITH hmat = 'BP127-01'
6 CONNECT BY PRIOR chlvhmat = hmat)
7 GROUP BY chlvhmat;
CHLVHMAT SUM(RATE)
-------------------- ----------
71(2426K) 0.965
24-1 0.035
SQL>