我正在尝试创建一个存储过程,它将显示由管理器管理的用户的结果。我试过用cte,但还是没有成功。
我想要什么,
第一个查询,用于选择 user name = @name
第二个查询:返回由(第一个查询)管理的用户 ManagerId
)
第三个查询:返回每个(第二个)查询管理的所有用户 ManagerId
)
数据结构如下:
sql查询:
WITH EmployeeCTE AS
(
(SELECT UserId, Email, ManagerId, Name
FROM Table1
WHERE DisplayName LIKE '%Paul%') tbl1
(SELECT UserId, Email, ManagerId, Name
FROM Table1
WHERE ManagerId = tbl1.UserId) tbl2
(SELECT UserId, Email, ManagerId, Name
FROM Table1
WHERE ManagerId = tbl1.UserId) tbl3
)
--Lastly
SELECT *
FROM EmployeeCTE
请帮助任何人。
1条答案
按热度按时间vsmadaxz1#
您只需要一个适当的递归cte—类似这样:
这将选择“锚定”行,然后根据“锚定”行“递归”经理/员工关系
Employee.ManagerId = Manager.UserId
. 我还添加了Level
列,这样您就可以看到每个条目位于哪个级别(层次结构的某个级别),“锚定”将是级别1,再向下一级将递增1。ps:如果需要将返回的数据集限制为根级别+最多两个级别,可以使用
Level
在你的期末考试中这样做SELECT
从cte中选择: