2016-09-16 19 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でグループ化してください。例えば。 = 100 EMP_IDマネージャおよびすべての従業員に彼/彼女のマネージャーの給料:Sergのソリューション@

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

は大丈夫ですが、1管理者のためのより簡単なクエリは動作します:

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 
関連する問題