d29*_*907 4 sql sql-server recursive-query hierarchical-data
我需要获取直接或间接依赖某人的所有员工的姓名。使用本示例中的查询(来自https://rextester.com/WGVRGJ67798),
create table employee(
id int not null,
employee varchar(10) not null,
boss int null
)
insert into employee values
(1,'Anna',null),
(2,'Bob',1),
(3,'Louis',1),
(4,'Sara',2),
(5,'Sophie',2),
(6,'John',4);
with boss as (
select id, employee, boss, cast(null as varchar(10)) as name
from employee
where boss is null
union all
select e.id, e.employee, b.id, b.employee
from employee e
join boss b on b.id = e.boss
)
select * from boss
Run Code Online (Sandbox Code Playgroud)
我可以得到这个结果:
但是,我需要看到这个:
这就像显示一个人与他或她“下面”的所有员工之间所有可能的关系。
你可以颠倒这个逻辑:你可以从叶子开始,走向根部,而不是从老板(根)开始走向员工(叶子)。这可以让您随时生成中间关系:
with cte as (
select e.id, e.employee, e.boss, b.employee name, b.boss new_boss
from employee e
left join employee b on b.id = e.boss
union all
select c.id, c.employee, c.new_boss, e.employee, e.boss
from cte c
join employee e on e.id = c.new_boss
)
select id, employee, boss, name
from cte
order by id, boss
Run Code Online (Sandbox Code Playgroud)
编号 | 员工 | 老板| 姓名 -: | :----- | ---: | :--- 1 | 安娜| 空| 无效的 2 | 鲍勃 | 1 | 安娜 3 | 路易斯| 1 | 安娜 4 | 萨拉 | 1 | 安娜 4 | 萨拉 | 2 | 鲍勃 5 | 苏菲 | 1 | 安娜 5 | 苏菲 | 2 | 鲍勃 6 | 约翰 | 1 | 安娜 6 | 约翰 | 2 | 鲍勃 6 | 约翰 | 4 | 莎拉
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |