Как обновить один ряд дважды. Второе обновление должно принимать обновленное значение из первого обновления - PullRequest
0 голосов
/ 10 мая 2019

У меня есть две таблицы tblProducts и temptable. 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

Этот запрос обновляет TotalSoldQuantity продукта1 до 15 вместо 20. Он должен обновляться один за другим после получения значения, обновленного предыдущими записями.

Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 10 мая 2019

Сначала необходимо собрать SoldQuantity, чтобы получить общее количество проданных товаров, а затем обновить:

WITH TotalAgg AS
(SELECT T.ProductId, SUM(T.SoldQuantity) AS TSQA FROM tempTable AS T GROUP BY T.ProductId)
UPDATE P SET P.TotalSoldQuantity = P.TotalSoldQuantity + T.TSQA 
FROM TotalAgg T JOIN tblProduct P ON P.ProductId = T.ProductId
1 голос
/ 10 мая 2019

Я бы написал так, избегая нестандартного синтаксиса 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 
0 голосов
/ 10 мая 2019

Вам нужно объединить ваши количества по ProductId в вашей временной таблице и объединить их с продуктами.

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...