2015-02-10 76 views
1

我有一个临时表@table在我的存储过程是这样的:SQL - 将数据添加到现有的数据从另一个表

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; 

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

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

+0

对于单个'AgtID',你有多个'event',所以哪个事件'points'你必须更新到'@ table' – 2015-02-10 17:46:35

+0

我需要所有这些事件。唯一相关的信息是AgtID,Points,然后是ContestID。 – PhoenixUNI 2015-02-12 18:32:20

回答

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()在下面的步骤来考虑空值的数学即使没有记录工作正常。

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; 
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; 
相关问题