該查詢所需提供了價值,但我不知道如果我沒有過於複雜的事情:
select employee_id, last_name, manager_id, sales, suma, prior suma psuma,
cast(suma/(prior suma + suma) as number(8, 4)) sumb
from (
with t as (SELECT employee_id, last_name, manager_id, sales, LEVEL lvl
FROM employees
where employee_id in (101, 108, 109, 110)
CONNECT BY PRIOR employee_id = manager_id
start with employee_id = 101)
select employee_id, last_name, manager_id, sales, lvl,
sum(sales) over (partition by manager_id) suma from t) t
connect by prior employee_id = manager_id
start with employee_id=101
order siblings by employee_id
結果:
EMPLOYEE_ID LAST_NAME MANAGER_ID SALES SUMA PSUMA SUMB
----------- -------------- ---------- ---------- ---------- ---------- ----------
101 Kochhar 100 121 121
108 Greenberg 101 80 80 121 ,398
109 Faviet 108 54 77 80 ,4904
110 Chen 108 23 77 80 ,4904
編輯: 同查詢如上,但更可讀,步驟更明顯,我希望。
T1基本上是您的查詢,只是從HR schema過濾了有趣的行。
T2是查詢與相同的經理(這一組Faviet和陳)集合總和。
最後的查詢又是分層次的,但是尋求所有已經合計的總和。
with t1 as (
SELECT employee_id, last_name, manager_id, sales, LEVEL lvl
FROM employees where employee_id in (101, 108, 109, 110)
CONNECT BY PRIOR employee_id = manager_id
start with employee_id = 101),
t2 as (select employee_id, last_name, manager_id, sales, lvl,
sum(sales) over (partition by manager_id) suma from t1)
select employee_id, last_name, manager_id, sales, suma dividend,
prior suma + suma divider,
cast(suma/(prior suma + suma) as number(8, 4)) result
from t2 connect by prior employee_id = manager_id
start with employee_id=101
order siblings by employee_id
EMPLOYEE_ID LAST_NAME MANAGER_ID SALES DIVIDEND DIVIDER RESULT
----------- ---------------- ---------- ---------- ---------- ---------- ----------
101 Kochhar 100 121 121
108 Greenberg 101 80 80 201 ,398
109 Faviet 108 54 77 157 ,4904
110 Chen 108 23 77 157 ,4904