2016-09-16 90 views
0

我有以下表中的員工(emp_id,name,salary,manager_id) 我想編寫查詢來檢索manager_id,並總結由此管理員管理的員工的所有薪水或甚至由管理員管理誰由這位經理管理。 我寫這樣的查詢:具有分層查詢功能的組功能

Select manager_id , sum(salary) 
from employees 
connect by prior emp_id = manager_id 
    start manager_id = 100 
group by manager_id; 

但這並不檢索和工資,因爲我想要的。

+0

你用什麼數據庫? – verhie

+0

'connect by prior'向oracle表示 – Nebi

回答

1

構建層次先記住ROOT,然後按root分組。例如。其中emp_id爲= 100的管理者和全體員工,他/她的經理的工資:

SELECT manager_id, SUM(salary) "Total_Salary" 
FROM (
    SELECT CONNECT_BY_ROOT emp_id as manager_id, Salary 
    FROM emploees 
    START WITH emp_id=100 
    CONNECT BY PRIOR emp_id = manager_id) 
GROUP BY manager_id 
ORDER BY manager_id; 
1

@ SERG的解決方案是好的,但對於一個經理更簡單的查詢工作:

select 21 as id, sum(salary) as summed 
    from employees e 
    start with emp_id = 21 
    connect by prior emp_id = manager_id; 

如果你不這樣做然後把經理的工資加到where level<>1

測試數據:

create table employees(emp_id number(4), name varchar2(10), 
         salary number(6), manager_id number(4)); 

insert into employees values ( 1, 'King', 10000, null); 
insert into employees values ( 11, 'Smith', 8000, 1); 
insert into employees values ( 21, 'Jones', 9000, 1); 
insert into employees values (211, 'Brown', 7500, 21); 
insert into employees values (212, 'Adams', 6200, 21); 
insert into employees values (2111, 'White', 5000, 211); 

輸出:

ID  SUMMED 
------ ---------- 
    21  27700