我有两个表tblEMP和tblChild。
在tblEMP中,我有两列Empid和salary,而在tblEMP工资值当前为null。 在tblChild中,我有三列Childid,Empid和薪水。 whrere empid来自tblEMP。
我的数据如下图所示。
现在我想从匹配EMPID的tblChild工资中更新tblEMP的工资。
例如tblEMP:EMPID 1的工资是:2500(tblChild ChildId 3)和
EMPID 2的薪水为:500(tblChild ChildId 4)和 EMPID 3的薪水为:4000(tblChild ChildId 6)。
由于
答案 0 :(得分:1)
试试这个:
;with cte as
(select empid,max(childid) maxid
from child
group by empid)
update emp
set salary = c.salary
from
emp e
inner join cte t on e.empid = t.empid
inner join child c on t.maxid = c.childid
基本上,每个ChildID
获得最大EmpID
,然后进行2次加入 - 首先是Emp
和基于EmpId
的CTE,然后是CTE和Child
上的ChildID
,以便从Child
表中获取所需的记录。
答案 1 :(得分:1)
或者您可以使用:
;with cte
as
(
select childid, empid, salary,
row_number() over(partition by empid order by empid, childid desc) rno
from child
)
update emp
set salary = cte.salary
from cte
where cte.empid = temp.empid
and cte.rno = 1
根据empid进行行编号并按比例更新员工表