在 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;
表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;