我从SQL Server数据库中提取员工数据以绘制组织结构图。我的公司有很多部门(我认为每个公司都有)。我只想一次拉一个特定的部门。
在我们的数据库中,每个部门主管也向CEO或主席报告。如何将部门主管的reportsToEmpId
列(在运行时)更改为NULL?如果部门主管的父母不属于该部门。
这是我的报告到表格结构:
empId, name, reportsToEmpId, deptId
100, John, 99, 1
101, Mary, 100, 1
102, Carol, 100, 1
99, Jim, null, 2
由于我只提取deptId = 1
,Jim
不是dept1
。我可以动态地将John
的{{1}}列更改为reportsToEmpId
吗?
NULL
我试图使用tmp表,但它看起来太麻烦了。
原始输出:
select fields I need
from reportsTo r
join employee e on r.empId = e.empId
join groupHightlight h on ...
where deptId=1
这是我的预期输出:(但是,我不想对原始表格进行任何更改,否则如果我想拉出向CEO报告的所有人,那么我就失去了"连接"之间的关系部门)。
empId, name, reportsToEmpId, deptId
100, John, 99, 1
101, Mary, 100, 1
102, Carol, 100, 1
答案 0 :(得分:2)
您必须使用Self Inner Join
来实现此目标
UPDATE T1
SET T1.reportsToEmpId = NULL
FROM reportsTo T1 INNER JOIN reportsTo T2
ON T1.reportsToEmpid = T2.empId
WHERE T1.deptid <> T2.deptId AND T1.deptID = 1
答案 1 :(得分:1)
您可以在empId
和deptId
上保持联接。如果报告的员工不具有相同的deptId
,那么reportsToEmpId
将为null
:
select r.empId, r.name, r2.empId reportsToEmpId, r.deptId
from reportsTo r
left join reportsTo r2
on r2.empId = r.reportsToEmpId and r.deptId = r2.deptId
where r.deptId=1