sql - 动态将supervisor节点更改为null

标签 sql sql-server tsql

我正在从 SQL Server 数据库中提取员工数据来绘制组织结构图。我的公司有很多部门(我想每个公司都有)。我一次只想拉一个特定的部门。

在我们的数据库中,每个部门负责人还向首席执行官或主席汇报。如何将部门负责人的 reportsToEmpId 列(在运行时)更改为 NULL?如果部门负责人的 parent 不属于该部门。

这是我的 reportsTo 表结构:

empId, name, reportsToEmpId, deptId
100, John, 99, 1
101, Mary, 100, 1
102, Carol, 100, 1
99, Jim, null, 2

因为我只拉取 deptId = 1,而 Jim 不是 dept1。我可以将 JohnreportsToEmpId 列动态更改为 NULL 吗?

select fields I need
from reportsTo r
join employee e on r.empId = e.empId
join groupHightlight h on ...
where deptId=1

我尝试使用tmp表,但似乎太麻烦了。

原始输出:

empId, name, reportsToEmpId, deptId
    100, John, 99, 1
    101, Mary, 100, 1
    102, Carol, 100, 1

这是我的预期输出:(但是,我不想对原始表进行任何更改,因为否则如果我想拉出所有向首席执行官报告的人,那么我就会失去部门之间的“连接”)。

empId, name, reportsToEmpId, deptId
    100, John, NULL, 1
    101, Mary, 100, 1
    102, Carol, 100, 1

最佳答案

您可以在 empIddeptId 上进行左连接。如果接受报告的员工没有相同的 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

关于sql - 动态将supervisor节点更改为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378251/

相关文章:

MySQL。如何通过多列进行选择

sql-server - 这是 MERGE 中的错误,未能正确实现 FOREIGN KEY 吗?

c# - 如何将数据从 ASP.Net 插入到 MS SQL Server?

sql - 在 SQL 中使用记录作为表名

java - 在plsql中映射元素然后排序

python - 将 SQL 子查询转换为 Peewee ORM

sql - 将时间 23 :59:59. 999 添加到结束日期之间

sql - 删除 "NOT IN"子句并优化查询

entity-framework - 为什么 SQL 中 SingleOrDefault 结果为 TOP(2)?

mysql - 检索每个 ID 的最新记录。如何,在 SQL 中?