Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于另一个表中的行值更新表中的列_Sql Server_Join_Sql Update_Case_Case When - Fatal编程技术网

Sql server 基于另一个表中的行值更新表中的列

Sql server 基于另一个表中的行值更新表中的列,sql-server,join,sql-update,case,case-when,Sql Server,Join,Sql Update,Case,Case When,我有一个表TABLE1,其中包含以下格式的数据: id text pct -- --- ----- 1 AA 5 1 BB 3 1 CC 16 2 BB 7 3 CC 13 id文本pct -- --- ----- 1 AA 5 1 BB 3 1 CC 1

我有一个表TABLE1,其中包含以下格式的数据:

id text pct -- --- ----- 1 AA 5 1 BB 3 1 CC 16 2 BB 7 3 CC 13 id文本pct -- --- ----- 1 AA 5 1 BB 3 1 CC 16 2 BB 7 3 CC 13 和另一个表2:

id columnAA columnBB columnCC -- ------- ------- -------- 1 0 0 0 2 0 0 0 3 0 0 0 id columnAA columnBB columnCC -- ------- ------- -------- 1 0 0 0 2 0 0 0 3 0 0 0 我想更新表2中的列,因此我的结果如下所示:

id columnAA columnBB columnCC -- ------- ------- -------- 1 5 3 16 2 0 7 0 3 0 0 13 id columnAA columnBB columnCC -- ------- ------- -------- 1 5 3 16 2 0 7 0 3 0 0 13 我试过使用这段代码,但实际上不起作用。它只更新一列

update a set columnAA = case when b.text = 'AA' then b.pct else columnAA end ,set columnBB = case when b.text = 'BB' then b.pct else columnBB end ,set columnCC = case when b.text = 'CC' then b.pct else columnCC end from table2 a join table1 b on a.id = b.id 更新 当b.text='AA'然后b.pct else columnAA end时,设置columnAA=case ,当b.text='BB'然后b.pct else columnb end时,设置columnb=case ,当b.text='CC'然后b.pct else columnCC end时,设置columnCC=case 来自表2 a 加入表1 b 在a.id=b.id上
正如Tab Allerman所说,您可以这样做:

UPDATE TABLE2
SET columnAA = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'AA'AND TABLE2.id = TABLE1.id),
columnBB  = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'BB'AND TABLE2.id = TABLE1.id),
columnCC  = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'CC'AND TABLE2.id = TABLE1.id)
编辑:


更仔细地查看您的代码。移除第二个和第三个“集合”,它应该可以工作。您不需要在每次更新中都只使用“Set”一词。

您需要为更新中的每一列执行透视或子选择。或者,对于表2中的每一列,您可以加入表1一次。你能给我看一些代码吗?你的代码可以用,但速度很慢。。我从代码中删除了集合,但仍然不起作用,然后您可能需要尝试PIVOT。快速搜索将包含许多示例,这些示例可以快速修改以满足您的要求。