如何更新两次单行。第二次更新应采用第一次更新的更新值

时间:2019-05-10 15:13:27

标签: sql sql-server database

我有两个表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)。在获取以前的记录更新值后,应该一个接一个地更新。

请帮助。

3 个答案:

答案 0 :(得分:2)

您需要先汇总S​​oldQuantity以获得总销售量,然后更新:

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