基于子tbl数据更新master tbl的数据

时间:2014-06-13 10:52:14

标签: sql-server sql-server-2008

我有两个表tblEMP和tblChild。

在tblEMP中,我有两列Empid和salary,而在tblEMP工资值当前为null。 在tblChild中,我有三列Childid,Empid和薪水。 whrere empid来自tblEMP。

我的数据如下图enter image description here所示。

现在我想从匹配EMPID的tblChild工资中更新tblEMP的工资。

例如tblEMP:EMPID 1的工资是:2500(tblChild ChildId 3)和

EMPID 2的薪水为:500(tblChild ChildId 4)和 EMPID 3的薪水为:4000(tblChild ChildId 6)。

由于

2 个答案:

答案 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进行行编号并按比例更新员工表