需要在 case 语句中对同一组项目求和
Need to sum same group of items in case statement
我有一个同批次的商品需要更新商品库存。当下面的查询执行时,只有一个项目批库存被添加到 stock.Need 以对同一组项目进行分组。如果相同的项目记录存在两次,则当前发出以下查询仅添加一次。如何在 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
必须将六百件商品数量添加到当前库存,但上面的查询只添加了 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;
我有一个同批次的商品需要更新商品库存。当下面的查询执行时,只有一个项目批库存被添加到 stock.Need 以对同一组项目进行分组。如果相同的项目记录存在两次,则当前发出以下查询仅添加一次。如何在 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
必须将六百件商品数量添加到当前库存,但上面的查询只添加了 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;