3
我需要查詢以從一個特定經理開始一直向下顯示下屬。比方說,我有這樣的結構,我需要得到所有員工經理ID = 1如何找到每個經理下的所有員工
EmployeeId ManagerId
2 1
3 1
4 3
5 3
6 4
我需要得到作爲查詢的結果開始在他的經理ID和直接報告的員工,隨着他們的下屬。
例如,使用SQL Server 2014:
CREATE TABLE #Pepe (EmployeeId INT, ManagerId int)
INSERT INTO [#Pepe] ([EmployeeId], [ManagerId]) VALUES (2, 1)
INSERT INTO [#Pepe] ([EmployeeId], [ManagerId]) VALUES (3, 1)
INSERT INTO [#Pepe] ([EmployeeId], [ManagerId]) VALUES (4, 3)
INSERT INTO [#Pepe] ([EmployeeId], [ManagerId]) VALUES (5, 3)
INSERT INTO [#Pepe] ([EmployeeId], [ManagerId]) VALUES (6, 4)
現在我得到的CTE
;WITH relation AS
(
SELECT 1 as EmployeeId, 0 AS LEVEL
UNION ALL
SELECT r.EmployeeId, LEVEL + 1 AS LEVEL
FROM (SELECT EmployeeId, ManagerId FROM #Pepe) r
INNER JOIN relation T
ON r.ManagerId = T.EmployeeId
WHERE r.ManagerId <> r.EmployeeId
)
SELECT DISTINCT EmployeeId, LEVEL FROM relation
我CTE的結果是這樣的:從
EmployeeId LEVEL
1 0
2 1
3 1
4 2
5 2
6 3
這個結果開始一個特定的員工是1(在CTE上進行了硬編碼),現在我只需要直接報告,Level = 1以及0級的直接報告EE ID 1,2和3
這是好的,現在我需要的是對每個員工的ID(0級和1),我需要得到這樣的結果:
EmployeeId ManagerId
1 1
2 1
3 1
4 1
5 1
6 1
2 2
3 3
4 3
5 3
6 3
正如你所看到的管理員ID包含0級和1級的員工,對於每個員工,我基本上都會調用CTE來讓所有員工失效,例如ManagerId = 2沒有下屬,但無論如何我都要計算它。有沒有一種有效的方法來做到這一點?我正在使用交叉應用程序將CTE放入內聯函數中,但我遇到了性能問題。
我不完全理解第二個數據集的要求是什麼。是否試圖找到每個員工最終報告的級別爲0或1的所有員工(包括員工本身是0級還是1級時)? –