如何让员工及其级别直接或间接地向经理报告,而无需在SQL Server中使用CTE?
如何在不使用CTE的情况下获取经理的下属及其级别 因为我们必须在MySQL中实现同样的功能 输出应该是这样的如何让员工及其级别直接或间接地向经理报告,而无需在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
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