Bil*_*lla 3 sql sql-server sql-server-2008
我如何选择公司及其子公司的所有员工?
使用SQL Server 2008
雇员
Id | Name | CompanyId
Run Code Online (Sandbox Code Playgroud)
公司
Id | Name | ParentCompanyId
Run Code Online (Sandbox Code Playgroud)
例:
1 Microsoft 0
2微软印度1
3 Microsoft Spain 1
我有下面这个查询,它只给微软的员工,而不是微软的印度和西班牙.
SELECT Id, Name FROM Employee WHERE CompanyId=1
Run Code Online (Sandbox Code Playgroud)
我不擅长SQL.帮助我.
使用CTE构建公司层次结构,然后将其连接回Employees表:
with CompanyHierarchy as
(
select Id
from Company
where Id = 1
union all
select c.Id
from Company c
inner join CompanyHierarchy ch on c.ParentCompanyId = ch.Id
)
select e.*
from CompanyHierarchy ch
inner join Employees e on ch.Id = e.CompanyId
Run Code Online (Sandbox Code Playgroud)
CompanyId如果要对语句进行参数化,还可以将变量替换为CTE的锚点部分:
with CompanyHierarchy as
(
select Id
from Company
where Id = @CompanyId
union all
select c.Id
from Company c
inner join CompanyHierarchy ch on c.ParentCompanyId = ch.Id
)
select e.*
from CompanyHierarchy ch
inner join Employees e on ch.Id = e.CompanyId
Run Code Online (Sandbox Code Playgroud)
SQL小提琴演示,现在添加了层次结构级别.
| 归档时间: |
|
| 查看次数: |
14758 次 |
| 最近记录: |