我有两个表tblProducts和temptable。临时表包含已售产品库存数量的详细信息。我想更新tblproduct中产品的销售数量。我的问题是临时表将具有同一产品的多个记录,当我使用连接对其进行更新时,它会根据旧值而不是新值进行更新。
tblProduct tempTable
============== ==========
ProductId Id
Name ProductId
StockQuantity SoldQuantity
OrderType
--------------
tblProduct
--------------
ProductId Name TotalSoldQuantity
1 Product1 10
2 Product2 20
-------------
tempTable
-------------
Id ProductId SoldQuantity OrderType
1 1 5 1
2 1 5 2
我在下面的查询中写了:
UPDATE P SET P.TotalSoldQuantity = P.TotalSoldQuantity + T.SoldQuantity
FROM tempTable T JOIN tblProduct P ON P.ProductId = T.ProductId
此查询将product1的TotalSoldQuantity更新为15(而不是20)。在获取以前的记录更新值后,应该一个接一个地更新。
请帮助。
答案 0 :(得分:2)
您需要先汇总SoldQuantity以获得总销售量,然后更新:
true
答案 1 :(得分:1)
我会这样写,避免使用非标准的UPDATE ... FROM语法,并提供一个简单的模式来在应用更改之前对其进行检查:
with q as
(
select p.ProductId,
p.TotalSoldQuantity,
AdditionalSoldQuantity = (select sum(SoldQuantity) from tempTable where productId = p.ProductId)
from tblProduct p
)
--select * from q
update q set TotalSoldQuantity = TotalSoldQuantity + AdditionalSoldQuantity
答案 2 :(得分:0)
您需要在临时表中汇总每个ProductId的数量,然后将其加入Products。
UPDATE P
SET P.TotalSoldQuantity = P.TotalSoldQuantity + T.SoldQuantity
FROM
(SELECT ProductId, SUM(TotalSoldQuantity) FROM tempTable GROUP BY ProductId) T JOIN
tblProduct P ON P.ProductId = T.ProductId