2014-02-07 2 views
0

내가 가지고 내가 직접 또는 간접적으로 각 관리자에서 일하는 모든 직원의 수를 얻으려면인쇄 번호 (오라클)

managername varchar2(20), 
salary number(10,2), 
empname varchar2(20), 
Constraint [PK_Emp] Primary key (empname), 
Constraint [FK_Emp] Foreign key (managername) references employee (empname) on delete cascade 

mangername   salary  empname 
------   ------   -------------- 
""    1000    Sumanta 
Sumanta   1000    Arpita 
Sumanta   1000    Pradip 
Arpita   1000    Sujon 
Sujon   1000    Arpan 
Sujon   1000    Jayanti 

같은 직원 테이블

답변

0

당신은 재귀 CTE하여이 작업을 수행 할 수 있습니다 :이 11g 릴리스에서 작동합니다

with cte(managername, empname, level) as (
     select managername, empname, 0 
     from employee 
     union all 
     select e.managername, cte.empname, level + 1 
     from cte join 
      employee e 
      on cte.managername = e.empname 
    ) 
select managername, count(*) 
from cte 
group by managername; 

2. 기본적으로 같은 코드가 작동하지만 SQL Fiddle에 문제가있는 것 SQL Server.

+0

저는 왜 이것이 작동하지 않는지 알지 못합니다. 그 첫 번째 라인 근처 레벨 컬럼에서주는 오차가 있습니다. – user3211808

+0

@ user3211808. . . 나도 몰라. 이 구문은 재귀 적 CTE의 경우에 적합하며 지금은 SQL Fiddle 만 테스트 할 수 있습니다. –