2016-09-16 40 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