mssql 两表之间更新 一对多问题

2020-10-31 14:17发布

问题:


有这样两个表 a表和b表,两个表根据id列可以匹配。a表的ID是主键,一个a表id可以匹配b表多条记录。现在想把b表里面的bak1更新到a表的bak4,当id一对多的情况,怎么把b表的值更新到a表,中间用逗号隔开。
求教各位大神

回答1:

b表先根据a表的主键进行列转行,然后那这列转行的数据根据关联Id进行update的更新就可以了



回答2:

b表先进行分组,然后将分组后的结果跟a表关联

sql2017以上可以使用string_agg函数

update a set a.bak4=t.bak
from a 
join
(
   select b.id,string_agg(b.bak1, ', ') as bak
   from a join b on a.id=b.id
   group by b.id
) t
on a.id=t.id

https://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server