Tsql T-SQL:从没有父ID的层次结构中确定上行和下行

Tsql T-SQL:从没有父ID的层次结构中确定上行和下行,tsql,hierarchy,Tsql,Hierarchy,我有这个自参考表,在这里我应该得到没有提供父ID的上线和下线以及层次结构级别 有什么想法吗?您尝试过使用递归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),

我有这个自参考表,在这里我应该得到没有提供父ID的上线和下线以及层次结构级别


有什么想法吗?

您尝试过使用递归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
获取有关父节点的信息

如果您需要任何有用的答案,您极其模糊的问题需要提供更多的细节。至少应该提供表模式和一些示例数据,以及基于该示例数据的预期结果。