我知道这个问题已经被问了几次了,我试着用这个解决方案来解决我的问题。不幸的是,它没有得到我想要的输出。我需要通过将一个表中的ID列连接到另一个表来更新ID列,在另一个表中,连接的列没有确切值。
TableA TableB
EmpNo EmpName ID EmpNo EmpName ID TermDate
101 John Doe Null 250termed_101 John Doe 250 11-15-2018
102 Jane Doe Null 251termed_102 Jane Doe 251 02-25-2019
101 Bryan Adams Null 252termed_101 Bryan Adams 252 03-12-2020下面是我尝试过的内容,但无法获得所需的输出,因为下面的查询给了我重复的内容:
select *
from TableA as A left join
TableB as B
on B.EmpNo like '%' + A.EmpNo + '%' and A.EmpNo is not null需要的输出:
EmpNo EmpName ID
101 John Doe 250
102 Jane Doe 251
101 Bryan Adams 252我需要通过在EmpNo上连接这两个表来将ID列从TableB填充到TableA中。对于第一条记录,John Doe于2018年11月15日终止,他的员工编号被分配给具有唯一ID的Bryan Adams。我需要将ID列从TableB填充到表A中,以对应于当时拥有该编号的员工。
提前感谢
发布于 2020-03-26 01:37:48
你似乎走在正确的道路上,update语句应该看起来像下面这样,还要注意我是如何使like比较更准确的:
update A SET
ID = B.ID
from
TableA as A
left join TableB as B on
B.EmpNo like '%_' + A.EmpNo and
A.EmpNo is not null;当你有101和1101或2101的时候,它会被打破,所以这不是一个很好的匹配,所以让我们再来看看:
update A SET
ID = B.ID
from
TableA as A
inner join TableB as B on
RIGHT(B.EmpNo, len(B.EmpNo) - charindex('_', B.EmpNo)) = A.EmpNo
A.EmpNo is not null and --you don't need this,
charindex('_', B.EmpNo) > 0;--needed, otherwise you get string errors发布于 2020-03-26 01:44:37
如果你的问题确实是你得到了你不想要的副本,你可以抛出一个DISTINCT。但你的问题出在数据上:布莱恩·亚当斯和约翰·多伊的雇员编号都是101,所以当你加入TableB时,他们看起来是重复的。
下面的SQL Fiddle可能会对您有所帮助:http://sqlfiddle.com/#!18/f30476/10
https://stackoverflow.com/questions/60853738
复制相似问题