需要在案例陈述中对同一组项目求和



我有一个批次相同的物料需要更新物料库存。当执行以下查询时,只有一个项目批次库存被添加到库存中。需要对同一组项目进行分组。若同一项目记录存在两次,则当前下发查询仅添加一次。如何在case语句中进行分组和求和。

UPDATE si
SET si.iCurrentStock = si.iCurrentStock + 
(CASE 
WHEN  ttd.vEffectType = 'Add' THEN ttd.iLeafQuantity
WHEN ttd.vEffectType = 'Subtract' THEN ttd.iLeafQuantity * -1 
ELSE 0 
END),
ttd.bIsStockUpdated = 1
FROM dbo.tblStoreItem si
INNER JOIN dbo.tblTransactionDetail ttd ON si.iItemId = ttd.iItemId
WHERE si.iStoreId = @v_StoreId
AND ttd.iTransactionId = @p_TransactionId
AND ISNULL(ttd.bIsStockUpdated, 0) = 0;

ItemId:1  Cost:500  BatchNumber:111 Quantity:200
ItemId:1  Cost:500  BatchNumber:222 Quantity:300
ItemId:1  Cost:200  BatchNumber:333 Quantity:100

600个项目的数量必须添加到当前库存中,但上述查询只添加了200个数量。

如果没有更多信息,您可能需要以下内容:

UPDATE si
SET si.iCurrentStock = si.iCurrentStock + 
(
SELECT
SUM(
(CASE 
WHEN  ttd2.vEffectType = 'Add' THEN ttd2.iLeafQuantity
WHEN ttd2.vEffectType = 'Subtract' THEN ttd2.iLeafQuantity * -1 
ELSE 0 
END)
)
FROM tblTransactionDetail ttd2
WHERE ttd2.iTransactionId = @p_TransactionId
AND ISNULL(ttd2.bIsStockUpdated, 0) = 0
)
,
ttd.bIsStockUpdated = 1
FROM dbo.tblStoreItem si
INNER JOIN dbo.tblTransactionDetail ttd ON si.iItemId = ttd.iItemId
WHERE si.iStoreId = @v_StoreId
AND ttd.iTransactionId = @p_TransactionId
AND ISNULL(ttd.bIsStockUpdated, 0) = 0;

最新更新