如何让员工及其级别直接或间接地向经理报告,而无需在SQL Server中使用CTE?

如何让员工及其级别直接或间接地向经理报告,而无需在SQL Server中使用CTE?,sql,sql-server,sql-server-2008,sql-server-2012,sql-server-2014,Sql,Sql Server,Sql Server 2008,Sql Server 2012,Sql Server 2014,如何在不使用CTE的情况下获取经理的下属及其级别 因为我们必须在MySQL中实现同样的功能 输出应该是这样的 employee_id manager_id 1 1 2 1 3 1 4 2 5 1 6 3 7 2 8 2 9 3 10

如何在不使用CTE的情况下获取经理的下属及其级别

因为我们必须在MySQL中实现同样的功能

输出应该是这样的

employee_id    manager_id
1               1
2               1
3               1
4               2
5               1
6               3   
7               2
8               2
9               3
10              2
第一级直接向相关经理汇报;二级和三级。。。因此,间接向经理的汇报员工汇报,也向其他员工的经理汇报

@Managerid = 1

manager_id          employee_id     Level
1                       2               1 
1                       3               1
1                       5               1
2                       4               2
2                       7               2
2                       8               2
2                       10              2
3                       9               3

有固定的最大级别数吗?没有,先生,它必须是动态变量。为什么两个平台都需要完全相同的查询?我们有存储过程之类的东西,这样每个平台都可以用最好的方式解决该平台的查询问题,应用程序就不必在意了。我建议您阅读任何建议、想法。。。。。。。。。。。。将是最有帮助的。。。。。。。。。
create table #employee (
            EmployeeID int,
            ManagerID int
        )
insert #employee 
    values
        (1, 1), 
        (2, 1), 
        (3, 1 ),
        (4, 2 ),
        (5, 1 ),
        (6, 3),
        (7, 2 ),
        (8, 2 ),
        (9, 3 ),
        (10, 2)

declare @RootEmployeeID int = 1
declare @lev int = 0
declare @rowcount int = 0
declare @oldcount int = 0

create table #employeetree (
        EmployeeID int,
        ManagerID int,
        lev int
    )


insert #employeetree
    (EmployeeID, ManagerID, lev)
    select  EmployeeID,
            ManagerID,
            0
        from #employee
        where
            EmployeeID = @RootEmployeeID
select @rowcount = COUNT(*) from #employeetree

while @rowcount > @oldcount
begin

    insert #employeetree
        (EmployeeID, ManagerID, lev)
        select  e.EmployeeID,
                e.ManagerID,
                et.lev + 1
            from #employeetree et
            join #employee e on
                e.ManagerID = et.EmployeeID
                and e.ManagerID <> e.EmployeeID -- skip cases where you are your own manager (otherwise you go infinite loop)
            where
                et.lev = @lev

    -- This works for both, instead of using @@ROWCOUNT (SQL Server) or ROW_COUNT() (MySql):
    set @lev = @lev + 1
    set @oldcount = @rowcount

    select @rowcount = COUNT(*) from #employeetree
end

select * from #employeetree

drop table #employeetree
drop table #employee