在 SQL 服务器上使用 CTE 获取用户的所有管理员
Getting all managers of the user by using CTE on SQL server
我尝试获取用户的所有高层管理人员。
例如。
Dan king(专家)--> Adam Lion(产品经理)--> Reina Ken(IT 主管)--> Michael Lorren(总监)--> Pat Deep(首席执行官)
我想在下面的一栏中显示 Dan King 的高层管理人员:
Adam
Reina
Michael
Pat
注意:
我使用了这个 link 并且我决定使用 manager 的用户。
我尝试根据示例代码转换我的代码,但没有成功:
;WITH OS_MANAGERS AS
(
SELECT USERID, MANAGERUSERID
from OSMANAGERS
), Manager AS
(
SELECT USERID, MANAGERUSERID
from OS_MANAGERS
where [userID]='mbalasubrama'
union all
SELECT B.USERID, B.MANAGERUSERID
from Manager A
inner join OS_MANAGERS B ON A.MANAGERUSERID= B.USERID
)
select A.USERID , a.MANAGERUSERID
from OS_MANAGERS A
left join Manager B on A.USERID=B.USERID
where A.[userID]='mbalasubrama'
只有我看到了用户的管理员,其他顶的不来
结果:
您的代码似乎有点太复杂...试试这个:
DECLARE @tbl TABLE(USERID INT,MANAGERUSERID INT,Name VARCHAR(100));
INSERT INTO @tbl VALUES
(1,NULL,'CEO Pat')
,(2,1,'Director Michael')
,(3,2,'HIT Reina')
,(4,3,'PM Adam')
,(5,4,'Dan King');
WITH ManagerRecursive AS
(
SELECT USERID, MANAGERUSERID,Name
from @tbl
where [userID]=5
union all
SELECT tbl.USERID, tbl.MANAGERUSERID,tbl.Name
from ManagerRecursive AS MR
INNER JOIN @tbl AS tbl ON tbl.USERID=MR.MANAGERUSERID
)
SELECT * FROM ManagerRecursive ;
结果
USERID MANAGERUSERID Name
5 4 Dan King
4 3 PM Adam
3 2 HIT Reina
2 1 Director Michael
1 NULL CEO Pat
你可以看到我的代码:
WITH ManagerRecursive AS
(
SELECT [USERID],[MANAGERUSERID]
FROM [EBA].[dbo].[OSMANAGERS]
where [userID]='dking'
union all
SELECT tbl.USERID, tbl.MANAGERUSERID
from ManagerRecursive AS MR
INNER JOIN [EBA].[dbo].[OSMANAGERS] AS tbl ON tbl.USERID=MR.MANAGERUSERID
)
SELECT * FROM ManagerRecursive ;
结果:
Userid manageruserid
dking tkir
tkir skara
我尝试获取用户的所有高层管理人员。
例如。 Dan king(专家)--> Adam Lion(产品经理)--> Reina Ken(IT 主管)--> Michael Lorren(总监)--> Pat Deep(首席执行官)
我想在下面的一栏中显示 Dan King 的高层管理人员:
Adam
Reina
Michael
Pat
注意:
我尝试根据示例代码转换我的代码,但没有成功:
;WITH OS_MANAGERS AS
(
SELECT USERID, MANAGERUSERID
from OSMANAGERS
), Manager AS
(
SELECT USERID, MANAGERUSERID
from OS_MANAGERS
where [userID]='mbalasubrama'
union all
SELECT B.USERID, B.MANAGERUSERID
from Manager A
inner join OS_MANAGERS B ON A.MANAGERUSERID= B.USERID
)
select A.USERID , a.MANAGERUSERID
from OS_MANAGERS A
left join Manager B on A.USERID=B.USERID
where A.[userID]='mbalasubrama'
只有我看到了用户的管理员,其他顶的不来
结果:
您的代码似乎有点太复杂...试试这个:
DECLARE @tbl TABLE(USERID INT,MANAGERUSERID INT,Name VARCHAR(100));
INSERT INTO @tbl VALUES
(1,NULL,'CEO Pat')
,(2,1,'Director Michael')
,(3,2,'HIT Reina')
,(4,3,'PM Adam')
,(5,4,'Dan King');
WITH ManagerRecursive AS
(
SELECT USERID, MANAGERUSERID,Name
from @tbl
where [userID]=5
union all
SELECT tbl.USERID, tbl.MANAGERUSERID,tbl.Name
from ManagerRecursive AS MR
INNER JOIN @tbl AS tbl ON tbl.USERID=MR.MANAGERUSERID
)
SELECT * FROM ManagerRecursive ;
结果
USERID MANAGERUSERID Name
5 4 Dan King
4 3 PM Adam
3 2 HIT Reina
2 1 Director Michael
1 NULL CEO Pat
你可以看到我的代码:
WITH ManagerRecursive AS
(
SELECT [USERID],[MANAGERUSERID]
FROM [EBA].[dbo].[OSMANAGERS]
where [userID]='dking'
union all
SELECT tbl.USERID, tbl.MANAGERUSERID
from ManagerRecursive AS MR
INNER JOIN [EBA].[dbo].[OSMANAGERS] AS tbl ON tbl.USERID=MR.MANAGERUSERID
)
SELECT * FROM ManagerRecursive ;
结果:
Userid manageruserid
dking tkir
tkir skara