SQL - 将数据添加到另一个 Table 的现有数据

SQL - Add Data to Existing Data From Another Table

我的存储过程中有一个临时 table @table,如下所示:

AgtID | Bonus
-------------
5063  | 0
1104  | 0

还有一个 table bonus 看起来像这样:

AgtID | Contest | Points | Event
--------------------------------
5063  | 21      | 1000   | 1
5063  | 21      | 3000   | 3
1104  | 21      | 1000   | 1
1104  | 21      | 500    | 2

和更新查询(当前)如下:

UPDATE tt
SET Bonus = b.Points
FROM @table tt
INNER JOIN tblContestData_Bonus b
ON tt.AgtID = b.AgtID
where ContestID = 21;

目前,当我 运行 这个查询时,它会用 bonus.Points 中的数据覆盖 @table.Bonus 中的任何数据。这对于单个记录来说很好,但是随着我们开始获得更多奖励积分事件,我需要让它增加我的价值。

我知道有些语言有 i += value... SQL 有类似的东西吗?

我可能遗漏了您想要的内容,但您可以将现有值添加到 UPDATE:

中的新值
UPDATE tt
SET Bonus = b.Points + Bonus
FROM @table tt
INNER JOIN tblContestData_Bonus b
ON tt.AgtID = b.AgtID
where ContestID = 21;

要在 SQL 中正确执行此操作,您需要预先聚合 b。您不能多次更新单个记录,因此当有多个匹配项时,update 将不会累积。它只更新(任意)记录。

像这样的东西会把所有的奖励积分加在:

UPDATE tt
    SET Bonus = coalesce(tt.Bonus, 0) + b.Points
FROM @table tt INNER JOIN
     (select agtId, sum(points) as points
      from tblContestData_Bonus b
      group by abtId
    ) b
    ON tt.AgtID = b.AgtID
where ContestID = 21;

我发帖后就明白了。有趣的是它是如何工作的。我做了什么:

UPDATE tt
SET Bonus = coalesce(
        (select SUM(Points) as Points
        from bonus b
        where b.AgtID = tt.AgtID
        and ContestID = 21
        group by AgtID),0)
FROM @table tt;

即使没有记录,使用 coalesce() 在以下步骤中计算空值也能正常工作。