我有员工名单,每个人都可以选择助理。所有员工都有EmpID [包括助理]。 AssistantID是助理的EmpID。我想通过EmpID查询并获取他们的AssistantID。特别说明:最终助手是具有NULL for AssistantID的人。例如:Susan的助手最终是Fred [Susan - >约翰 - >马克 - >弗雷德。有人可以帮助查询/子查询来检索此信息吗? [使用标准SQL,例如,没有专有的sql]。
例如:
EmpID Name AssistantID
=======================
1, Bob, NULL
2, Susan, 3
3, John, 4
4, Mary, 6
5, Bill, NULL
6, Fred, NULL
答案 0 :(得分:2)
如果我理解你的问题,你想找回员工的最低帮助。
WITH RCTE AS
(
SELECT * , EmpID AS TopEmp
FROM EMPLOYEES c
UNION ALL
SELECT c.* , r.TopEmp
FROM dbo.EMPLOYEES c
INNER JOIN RCTE r ON c.EmpID = r.AssistantID
)
select EmployeeName,Assistant from
(
SELECT
e.EmpID AS EmployeeId,
e.Name AS EmployeeName,
r.Name AS Assistant,
r.EmpID AS AssistantId
FROM RCTE r
inner join EMPLOYEES e ON r.TopEmp = e.EmpID
where r.AssistantID is null
) Records