跟踪多个批次的消耗品库存
高效的库存管理需要精确跟踪合并批次中的消耗品数量。 这就需要一个查询,根据特定条件准确地从多个批次中扣除消耗量。 所提出的解决方案利用递归通用表表达式 (CTE) 来实现此目的。
递归 CTE 方法:
该解决方案的核心是递归 CTE,巧妙地命名为“Amos”,它会迭代池中的批次。 首先用第一批来初始化每个池。 然后,CTE 递归处理后续批次,动态更新消耗数量。
对于每一批次,CTE 根据累计消耗计算RunningQuantity
(剩余数量)和RemainingDemand
(未结数量)。 然后,这些值将用于通知同一池中后续批次的计算。
输出详细信息:
最终结果集提供了每个池和批次的全面细分,包括:
示例实现:
以下示例使用示例数据演示了查询的功能:
<code class="language-sql">-- Sample Data (Pooled Lots) DECLARE @Pooled_Lots TABLE (Id INT, Pool INT, Lot INT, Quantity INT); INSERT INTO @Pooled_Lots (Id, Pool, Lot, Quantity) VALUES (1, 1, 1, 5), (2, 1, 2, 10), (3, 1, 3, 4), (4, 2, 1, 7), (5, 3, 1, 1), (6, 3, 2, 5); -- Sample Data (Pool Consumption) DECLARE @Pool_Consumption TABLE (Id INT, Pool INT, QuantityConsumed INT); INSERT INTO @Pool_Consumption (Id, Pool, QuantityConsumed) VALUES (1, 1, 17), (2, 2, 8), (3, 3, 10); -- Recursive CTE Query WITH Amos AS ( -- Anchor Member: Initialize with the first lot of each pool SELECT PL.Pool, PL.Lot, PL.Quantity, PC.QuantityConsumed, CASE WHEN PC.QuantityConsumed IS NULL THEN PL.Quantity WHEN PL.Quantity >= PC.QuantityConsumed THEN PL.Quantity - PC.QuantityConsumed ELSE 0 END AS RunningQuantity, CASE WHEN PC.QuantityConsumed IS NULL THEN 0 WHEN PL.Quantity >= PC.QuantityConsumed THEN 0 ELSE PC.QuantityConsumed - PL.Quantity END AS RemainingDemand FROM @Pooled_Lots PL LEFT JOIN @Pool_Consumption PC ON PC.Pool = PL.Pool WHERE Lot = 1 UNION ALL -- Recursive Member: Process subsequent lots SELECT PL.Pool, PL.Lot, PL.Quantity, CTE.QuantityConsumed, CASE WHEN CTE.RunningQuantity + PL.Quantity >= CTE.RemainingDemand THEN CTE.RunningQuantity + PL.Quantity - CTE.RemainingDemand ELSE 0 END, CASE WHEN CTE.RunningQuantity + PL.Quantity >= CTE.RemainingDemand THEN 0 ELSE CTE.RemainingDemand - CTE.RunningQuantity - PL.Quantity END FROM Amos CTE JOIN @Pooled_Lots PL ON PL.Pool = CTE.Pool AND PL.Lot = CTE.Lot + 1 ) -- Final Result Set SELECT *, CASE WHEN Lot = (SELECT MAX(Lot) FROM @Pooled_Lots WHERE Pool = Amos.Pool) THEN RunningQuantity - RemainingDemand ELSE NULL END AS SurplusOrDeficit FROM Amos ORDER BY Pool, Lot;</code>
这个精致的解释和示例让您更清楚地了解递归 CTE 的功能及其在库存管理中的应用。 SurplusOrDeficit
计算现在明确与每个池中的最后一批相关联。
以上是递归 CTE 如何分配和跟踪合并批次中的消耗品数量,提供剩余数量和未完成数量的详细分类?的详细内容。更多信息请关注PHP中文网其他相关文章!