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

时间:2015-02-10 17:43:10

标签: sql sql-server-2005

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

我发布后就知道了。有趣的是如何工作。我做了什么:

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()在以下步骤中将空值计算到数学也可以正常工作。

答案 1 :(得分:0)

我可能会错过您在此处的内容,但您可以将现有值添加到UPDATE中的新值:

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

答案 2 :(得分:0)

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