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()
在以下步骤中计算空值也能正常工作。
我的存储过程中有一个临时 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()
在以下步骤中计算空值也能正常工作。