cte query - 可能的迭代来识别记录中的层次结构

时间:2015-01-12 13:27:29

标签: sql sql-server tsql iteration common-table-expression

之前我问过类似的问题,但我的查询变得更加复杂。

我有以下查询...

-- 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

0 个答案:

没有答案
相关问题