Tsql T-SQL:从没有父ID的层次结构中确定上行和下行
我有这个自参考表,在这里我应该得到没有提供父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),
有什么想法吗?您尝试过使用递归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
获取有关父节点的信息如果您需要任何有用的答案,您极其模糊的问题需要提供更多的细节。至少应该提供表模式和一些示例数据,以及基于该示例数据的预期结果。