0

次のような部門(子内)のすべての従業員をカウントする単純なSQLクエリがあります。

With Temp(id) AS
(
        Select d.id From DEPARTMENT d 
    Where d.id = 1 
    UNION ALL
    Select d.id From DEPARTMENT d JOIN Temp te ON d.idDepartment = te.id
)
Select count(*) From 
(
    Select e.id From Employee e Join Temp te On e.idDepartment = te.id
)

しかし、「StackOverflow」というエラーが表示されます。どこが間違っているのかわかりません。助けてもらえますか? テスト ケースのデータがいくつかあります: テーブル Department :

ID----------departmentName-----------idDepartment(id parent)
1              A                         0
2              B                         1

テーブルの従業員:

id----------employeeName------------idDepartment
1              E_1                       1
2              E_2                       1
3              E_3                       2

したがって、部門 (A) の従業員の数を選択すると、結果: 3、部門 B の場合は --> 結果: 1 ありがとう!

4

1 に答える 1

2

私はうまくいく解決策を持っていると思います:

create table Department(id int, name varchar(255), idDepartment int);
create table Employee(id int, name varchar(255), idDepartment int);
insert into Department values(1, 'A', 0), (2, 'B', 1);
insert into Employee values(1, 'E1', 1), (2, 'E2', 1), (3, 'E3', 2);
with recursive temp(id) as (
    select 1 union all
    select d.id from temp te 
    inner join Department d on d.idDepartment = te.id
)
select count(*) from temp te 
inner join Employee e on e.idDepartment = te.id;
drop table Department;
drop table Employee;
于 2013-01-19T09:28:48.567 に答える