sql-server – 使用CTE获取经理下的所有员工
发布时间:2021-03-13 16:26:02 所属栏目:MsSql教程 来源:网络整理
导读:我有一张有员工详细信息的表格 EmpId ManagerId Level Value1 0 5 CEO2 1 4 EMP3 1 4 ORG4 2 3 NULL5 2 3 NULL6 2 2 NULL7 1 1 NULL8 5 0 NULL 现在,我必须从员工身份2开始,发现所有人都是低级别的雇员(即2,4,5,6,8),并将其分配给与“2”相同的值(即EMP). 预
我有一张有员工详细信息的表格 EmpId ManagerId Level Value 1 0 5 CEO 2 1 4 EMP 3 1 4 ORG 4 2 3 NULL 5 2 3 NULL 6 2 2 NULL 7 1 1 NULL 8 5 0 NULL 现在,我必须从员工身份2开始,发现所有人都是低级别的雇员(即2,4,5,6,8),并将其分配给与“2”相同的值(即EMP). 预期产量: EmpId ManagerId Level Value 1 0 5 CEO 2 1 4 EMP 3 1 4 ORG 4 2 3 EMP 5 2 3 EMP 6 2 2 EMP 7 1 1 NULL 8 5 0 EMP 我在想什么: ; WITH LevelHire AS ( SELECT EmpId,ManagerId,Level FROM EmployeeTable WHERE EmpId =2 UNION ALL SELECT Lh.EmpId,RC.ManagerId,Lh.Level FROM LevelHire LH INNER JOIN [EmployeeTable] RC ON LH.EmpId= RC.EmpId ) SELECT * FROM LevelHire option (maxrecursion 0) 我怎样才能实现同样的目标? 解决方法你可以尝试这样的事情;WITH EmployeeTable AS ( SELECT 1 EmpId,0 ManagerId,5 Level,'CEO' Value UNION ALL SELECT 2,1,'EMP' UNION ALL SELECT 3,'ORG' UNION ALL SELECT 4,2,3,NULL UNION ALL SELECT 5,NULL UNION ALL SELECT 6,NULL UNION ALL SELECT 7,NULL UNION ALL SELECT 8,NULL ),LevelHire AS ( SELECT EmpId,Level,Value FROM EmployeeTable WHERE EmpId = 2 UNION ALL SELECT RC.EmpId,Lh.Level,LH.Value FROM LevelHire LH INNER JOIN [EmployeeTable] RC ON LH.EmpId= RC.ManagerId ) SELECT E.EmpId,E.ManagerId,E.Level,ISNULL(E.Value,LH.Value) Value FROM EmployeeTable E LEFT JOIN LevelHire LH ON E.EmpId = LH.EmpId (编辑:老爷爷站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – SQL Server CASE语句是否评估所有条件或在第
- sql-server – 在“正在恢复”状态下突然迁移的SQL Server数
- 用Media Player制作WMA文件
- sql-server-2000 – 如何从PHP 5.3及更高版本连接到MSSQL 2
- sql-server – 为什么LEN()函数严重低估了SQL Server 2014中
- 演绎你的梦想,数码大师2004 打造属于你的MTV
- 捷波主板“买一送二”活动再掀市场高潮!
- sql-server – 如何在SQl Server 2008中选择distinct,但仅限
- 笔记本电脑内存类型
- sqlserver中行列互换怎么完成?