我有一张员工表 - 有效或无效。结构如下
create table employee
(
id int,
supervisorid int,
active bit
)
另一个表Component包含类似..
的项目create table component
(
cid int,
empid int
)
加载了一些示例数据HERE
如何更新组件表,以便empid字段包含非活动员工的IMMEDIATE ACTIVE SUPERVISOR ID。在示例中,更新结果应该类似于
Component
---------
Cid | empid
--------------
1 1235
2 1246
3 1246
我可以使用小提琴页面中提到的查询为特定员工生成层次结构表。
答案 0 :(得分:0)
您可以使用递归CTE为每个非活动ID创建一个用于更新的表,其中第一个活动的supervisorID。在第一次迭代中,您选择所有活动ID's
并将其BaseID
设置为相同。在每次下一次迭代中,您选择其NON-ACTIVE子级的下一级添加到递归表并在每个记录中保存根BaseID
。因此,当您添加所有记录时,每个BaseID
的{{1}}字段是第一个ACTIVE父级。然后我们只留下ID
我们需要更新ID's
表中的Id<>BaseID
}。然后使用此表ForUpd
- &gt; Id
更新原始表格。
BaseID