Sql server 基于另一个表中的行值更新表中的列
我有一个表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上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
正如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。快速搜索将包含许多示例,这些示例可以快速修改以满足您的要求。