我有这个自引用表格,我应该在没有提供父ID的情况下获得上线,下线和层次结构级别。
有什么想法吗?
答案 0 :(得分:0)
您是否尝试过使用递归CTE? 例如: 假设您有表tbl(EmpId,Name,MngrId)具有自引用关系
create table tbl
(
EmpId int not null,
Name nvarchar(100),
MngrId int null)
insert into tbl(EmpId, Name, MngrId)
values (1,'Adel',Null),
(2,'Ali',1),
(3,'Shaban',1),
(4,'Mark',3),
(5,'John',3),
(6,'Tony',Null),
(7,'Peter',6)
您可以创建一些类似的视图:
create view Employees
Begin
with cte
as
(
Select EmpId,Name, Null as MngrId, cast(null as nvarchar(100)) as MngrName, 1 as EmpLevel
from tbl
where MngrId is Null
Union All
Select t.EmpId, t.Name, c.EmpId as MngrId, c.Name as MngrName, c.EmpLevel + 1 as EmpLevel
from tbl t
inner join cte c
on t.MngrId = c.EmpId
)
Select *
from cte
order by EmpLevel, EmpId
End
您现在可以使用EmpLevel
在不同级别和MngrName
之间跳转以获取有关父节点的信息