Tengo dos tablas tblProducts y temptable. temptable contiene los detalles de la cantidad de stock de productos vendidos. Quiero actualizar la cantidad vendida de productos en tblproduct. Mi problema es que la tabla temporal tendrá múltiples registros para el mismo producto y cuando la actualice usando unirlo, actualice el valor anterior en lugar del nuevo.
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
He escrito a continuación la consulta:
UPDATE P SET P.TotalSoldQuantity = P.TotalSoldQuantity + T.SoldQuantity
FROM tempTable T JOIN tblProduct P ON P.ProductId = T.ProductId
Esta consulta actualiza TotalSoldQuantity del producto1 a 15 en lugar de 20. Debe actualizarse uno por uno después de tomar el valor actualizado de los registros anteriores.
Por favor, ayúdeme.
3 respuestas
Primero debe agregar SoldQuantity para obtener el total vendido y luego actualizar:
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
Lo escribiría así, evitando la sintaxis ACTUALIZACIÓN no estándar ... DE, y proporcionando un patrón simple para examinar los cambios antes de aplicarlos:
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
Debe agregar sus cantidades por ProductId en su tabla temporal y unirlas a los Productos.
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
Nuevas preguntas
sql
El lenguaje de consulta estructurado (SQL) es un lenguaje para consultar bases de datos. Las preguntas deben incluir ejemplos de código, estructura de tabla, datos de muestra y una etiqueta para la implementación de DBMS (por ejemplo, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) que se utiliza. Si su pregunta se relaciona únicamente con un DBMS específico (usa extensiones / características específicas), use la etiqueta de ese DBMS en su lugar. Las respuestas a las preguntas etiquetadas con SQL deben usar SQL estándar ISO / IEC.