在 Sql 服务器中,如何从 Table B 的多个记录更新 Table A 记录值

In Sql Server, how can I update Table A record values from multiple records of Table B

表A: 身份证号码, 名称 1 varchar, 名称 2 varchar

表B: 身份证号码, 名称变量, 输入 varchar

当 TableA 中的 Name1 和 Name2 具有相同的 ID 值时,我想更新它们: 当 TableB.Type = '1' 时,只用 TableB.Name 更新 TableA.Name1; 当 TableB.Type = '2' 时,只用 TableB.Name;

更新 TableA.Name2

我尝试了类似下面的方法,但似乎只有 Name1 得到更新:

update TableA
set TableA.Name1 = case when TableB.Type = '1' then TableB.Name end,
TableA.Name2 = case when TableB.Type = '2' then TableB.Name end
from TableA join TableB on TableA.ID = Table B.ID

您的意见将不胜感激。


下面是描述案例的可运行示例:

create table #AAA
(
    ID      varchar(1000),  
    Name1   varchar(1000),
    Name2   varchar(1000)
)
insert #AAA values ('99', null, null);

create table #BBB
(
    ID      varchar(1000),  
    Name    varchar(1000),
    Type    varchar(1000)
)
insert #BBB values ('99', 'x', '1');
insert #BBB values ('99', 'y', '2');

update a
set a.Name1 = case when b.Type = '1' then b.Name else a.Name1 end,
    a.Name2 = case when b.Type = '2' then b.Name else a.Name2 end
from #AAA a inner join #BBB b on a.ID = b.ID

select * from #AAA

*更新前,#AAA中的数据如下: 编号=99;名称 1=空; Name2=null;

*更新后#AAA中的数据如下: 编号=99;名称 1=x; Name2=null;

我正在考虑首先在 B table 上进行条件聚合,然后进行更新连接:

WITH cte AS (
    SELECT ID, MAX(CASE WHEN Type = '1' THEN Name END) AS Name1,
               MAX(CASE WHEN Type = '2' THEN Name END) AS Name2
    FROM TableB
    GROUP BY ID
)

UPDATE a
SET Name1 = b.Name1, Name2 = b.Name2
FROM TableA a
INNER JOIN cte b ON a.ID = B.ID;