Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL使用公共表表达式获取所有节点及其最后一级子节点_Sql_Sql Server_Tsql_Common Table Expression - Fatal编程技术网

T-SQL使用公共表表达式获取所有节点及其最后一级子节点

T-SQL使用公共表表达式获取所有节点及其最后一级子节点,sql,sql-server,tsql,common-table-expression,Sql,Sql Server,Tsql,Common Table Expression,我需要最后一级和父级之间所有节点的最后一级子级。我不熟悉递归CTE,并试图得到这个结果 考虑下表: emp id | mgr id 1 null 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 4 10 4 11 5 12 6 13 6 14

我需要最后一级和父级之间所有节点的最后一级子级。我不熟悉递归CTE,并试图得到这个结果

考虑下表:

emp id  |  mgr id
1          null
2          1
3          1
4          1
5          2
6          2
7          3
8          3
9          4
10         4
11         5
12         6
13         6
14         6
15         11
如果输入为
(15)
,则输出应为

mgr id     emp id
2          12
2          13
2          14
2          15
5          15
6          12
6          13
6          14
11        15
在网上搜索我想这可以通过递归查询来完成,但我无法做到

with cte as
(
    select 
        emp_id, mgr_id
    from  
        emp_heirarchy
    where 
        emp_id in (select MIN(lt.emp_id) 
                   from landing_table lt
                   inner join emp_heirarchy eh on lt.emp_id = eh.emp_id
                   group by mgr_id)

    union all

    select 
        eh.emp_id, eh.mgr_id
    from  
        emp_heirarchy eh
    inner join 
        cte c on c.mgr_id = eh.emp_id
)
select distinct * 
from cte 
order by mgr_id

我尝试了上述查询的其他几个版本,但没有成功。

您的递归查询工作正常,我不理解预期结果。
11 16
这16来自哪里?我不理解您想要的结果集。如果您正在向管理者遍历层次结构,为什么要在2处停止?也就是说,为什么不升到emp_id=1?我第二个问题是“11,16”这一行是从哪里来的?很抱歉搞混了。我已经编辑了我的问题并删除了EMPID16。我不想进入根目录。我只需要在节点之间,即根和最后一个子节点之间。我希望每个这样的节点都与最后一个子节点一起显示。因此,我们需要结果中的节点2,它位于根和最后一个子节点之间。节点2的最后一个子节点是15(来自子节点2和5)和12,13,14(来自子节点6)。类似地,我希望在结果中表示11、5和6。我不想从其他节点得到任何东西,因为它们与输入15无关,根节点除外。我不知道现在是否清楚。这一个有点难以解释。您的递归查询工作正常,我不理解预期结果。
11 16
这16来自哪里?我不理解您想要的结果集。如果您正在向管理者遍历层次结构,为什么要在2处停止?也就是说,为什么不升到emp_id=1?我第二个问题是“11,16”这一行是从哪里来的?很抱歉搞混了。我已经编辑了我的问题并删除了EMPID16。我不想进入根目录。我只需要在节点之间,即根和最后一个子节点之间。我希望每个这样的节点都与最后一个子节点一起显示。因此,我们需要结果中的节点2,它位于根和最后一个子节点之间。节点2的最后一个子节点是15(来自子节点2和5)和12,13,14(来自子节点6)。类似地,我希望在结果中表示11、5和6。我不想从其他节点得到任何东西,因为它们与输入15无关,根节点除外。我不知道现在是否清楚。这个有点难以解释。