【发布时间】:2019-07-13 08:51:11
【问题描述】:
我有两张表 Orders 和 Inventory。
create table #orders
(orderId int,
demand decimal,
itemId int)
create table #inventory
(invId int,
qtyOnHand decimal,
itemId int)
insert into #orders
values(101, 2, 999)
insert into #orders
values(102, 1, 999)
insert into #inventory
values(601, 1, 999)
insert into #inventory
values(602, 4, 999)
insert into #inventory
values(603, 1, 999)
我需要为已排序的订单分配相应的库存数量。所以预期的结果是:
orderID - inventoryID - reservedQty
101 601 1
101 602 1
102 602 1
主要问题是#inventory.qtyOnHand 在我将其分配给订单时正在发生变化
我已经尝试过的是汇总所有库存
SELECT
itemId,
sum(qtyOnHand) as qtyOnHand,
STUFF((
SELECT ', ' + cast(invId as varchar)
FROM #inventory
WHERE (itemId = inv.itemId)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,2,'') AS inv_info
into #inv_aggr
FROM #inventory inv
GROUP BY itemId
select #orders.orderId,
case when ( #inv_aggr.qtyOnHand >= (select sum(o.demand) from #orders o where o.itemId = #orders.itemId and o.orderId <= #orders.orderId))
then #orders.demand
else #inv_aggr.qtyOnHand - (select coalesce(sum(demand), 0) from #orders o where o.itemId = #orders.itemId and o.orderId < #orders.orderId)
end as qty_rsvd,
#inv_aggr.inv_info
from #orders
inner join #inv_aggr
on #inv_aggr.itemId =#orders.itemId and #inv_aggr.qtyOnHand > 0
但这无济于事,因为我可以按库存拆分和匹配订单
我将不胜感激有关如何实施此任务或如何将此任务拆分为多个方面的任何建议。
【问题讨论】:
-
this 回答有帮助吗?您可以通过搜索
[tsql] deplete找到其他一些相关的帖子。 -
伟大的第一篇文章!继续发布可用的示例数据和可读的期望结果的方法!
标签: tsql