[英]sql server query to select parents with specific children
我有下表:
ID Emp_Name Manager_ID
101 Ken NULL
102 Terri 101
103 Roberto 101
104 Rob 102
105 Gail 102
106 Jossef 103
107 Dylan 103
108 Diane 105
109 Gigi 105
110 Michael 106
例如,我需要獲取“ 106 Josef”的所有管理者,結果必須是:
106 Josef 103
103 Roberto 101
101 Ken NULL
什么是最好的SQL Server查詢做到這一點
我的遞歸CTE 非常生銹,我沒有數據庫可以方便地進行測試,這會更容易朝另一個方向(對報告人進行管理)進行,但是我認為這可以做到,或者至少可以接近:
declare @EmpID int;
set @EmpId = 106;
with IDs (ID, Manager_ID) As (
select ID, Manager_ID FROM Employees WHERE ID = @EmpID
UNION ALL
SELECT ID, Manager_ID
FROM Employees e
LEFT JOIN ManagerIDs m on e.ID = m.Manager_ID
WHERE e.ID IS NOT NULL
)
SELECT e.*
FROM IDs i
INNER JOIN Employees e on e.ID = i.ID;
您可以進行while循環以遍歷三個管理器,直到獲得主體節點為止,在每次迭代中,代碼將行插入到臨時表上。 這是一個例子。
DECLARE @employeeId int
DECLARE @managerId int
SET @employeeId=106
SET @managerId=(SELECT Manager_ID FROM Employees WHERE ID=@employeeId)
DECLARE @tableEmployee as TABLE
(
ID int,
NAME varchar(100),
MANID INT
)
INSERT INTO @tableEmployee SELECT * FROM Employees WHERE ID=@employeeId
WHILE @managerId is not null
BEGIN
INSERT INTO @tableEmployee SELECT * FROM Employees WHERE ID=@managerId
SET @managerId=(SELECT Manager_ID FROM Employees WHERE ID=@managerId)
END
SELECT * FROM @tableEmployee
GO
我認為不是最好的,但可以,我希望這會有所幫助:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.