如何在没有光标的情况下实现多对多匹配

时间:2019-07-13 08:51:11

标签: tsql

我有两个表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

但这没有帮助,因为我可以按库存拆分和匹配订单

我将不胜感激有关如何实施此任务或如何将这项任务分成几部分的建议。

0 个答案:

没有答案