我正在尝试从包含多次出现的accountID的表中更新具有唯一accountID的表。例如,我在表B中有一次accountID 1,在表A中有一次出现5次的accountID 1。
所以基本上我会从多行更新到一行,其中包含该行的所有数据。
示例:
表A具有每个accountID的多个记录
accountID site hard soft
1 12 20 0
1 13 30 10
1 14 40 0
我需要更新只有accountID且没有其他数据的表B.看起来像这样:
accountID site12_hard site12_soft site13_hard site13_soft site14_hard site14_soft
1
所以我链接了accountID并为所有字段做了case语句。像这样:
update table B set
site12_hard = case when site = 12 then hard else 0 end,
site12_soft = case when site = 12 then soft else 0 end,
from table A inner join table B on accountID = accountID
这不能正常工作,因为accountID上的一对多链接会导致case语句评估该accountID的每次出现。因此它可以在site12_hard上正确更新,但是当它移动到accountID = 1的下一条记录时,它不再是site = 12,所以它更新为零。
如果“when”不成立,我需要一种方法让case语句不执行任何操作。或者我需要一种完全不同的方法来更新此表。
答案 0 :(得分:0)
我刚刚为site 12 & 13
做了类似site 14
必须完成的工作。试试这个..
UPDATE B
SET site12_hard = a.site12_hard,
site12_soft = a.site12_soft,
site13_hard = a.site13_hard,
site13_soft = a.site13_soft
FROM tableB B
INNER JOIN (SELECT accountID,
Max(CASE WHEN [site] = 12 THEN hard END) site12_hard,
Max(CASE WHEN [site] = 12 THEN soft END) site12_soft,
Max(CASE WHEN [site] = 13 THEN hard END) site13_hard,
Max(CASE WHEN [site] = 13 THEN soft END) site13_soft
FROM tableA
GROUP BY accountID) a
ON a.accountID = b.accountID