之前我问过类似的问题,但我的查询变得更加复杂。
我有以下查询...
-- get all staff in chain of command...
DECLARE @staffid INT = '8';
WITH n ( staffid, linemanagerid )
AS ( SELECT staffid ,
linemanagerid
FROM RM_Public.Hierarchy
WHERE staffid = @staffid
UNION ALL
SELECT nplus1.staffid ,
nplus1.linemanagerid
FROM RM_Public.Hierarchy AS nplus1
INNER JOIN n ON n.staffid = nplus1.linemanagerid
),
m ( staffid, linemanagerid )
AS ( SELECT staffid ,
linemanagerid
FROM RM_Public.Hierarchy
WHERE staffid = @staffid
UNION ALL
SELECT nplus1.staffid ,
nplus1.linemanagerid
FROM RM_Public.Hierarchy AS nplus1
INNER JOIN m ON m.linemanagerid = nplus1.staffid
)
SELECT HierarchyID ,
LineManagerID ,
StaffID
FROM RM_Public.Hierarchy
WHERE staffid IN ( SELECT staffid
FROM n
UNION
SELECT staffid
FROM m )
产生下表:
id lineManagerID staffID changeable
16 9 8
19 8 7
20 8 6
21 6 5
24 NULL 9
所以,目前我只有lineManagerID和StaffID。我想将Change列设置为'y'或'n',具体取决于staff或lineManagers是否低于命令链中的给定staffID。
例如......从staffid = 8的角度来看,该表看起来像
id lineManagerID staffID changeable
16 9 8 y
19 8 7 y
20 8 6 y
21 6 5 y
24 NULL 9 n
因此,如果staffid = 8或者staffid是命令链中的lineManager,那么列标记为'y',对于它下面的职员来说......这有意义吗? 如果工作人员对链中较高者没有权限,则应将其标记为“n”。由于9是8的经理,因此8无权更改9的直线经理。我希望这很清楚。
希望你们能帮忙。
感谢。 DS