我正在SQL Server中编写存储过程,并希望有人可以提出一种更有效的计算方法来处理这个问题:
我有一个包含3000个订单项的客户订单(即“产品需求”)数据表。每条记录都表示特定产品的订单数量。
我还有另一张包含约200个订单项的生产订单(即“产品供应”)数据表。每条记录都表示每种特定产品的可用数量。
问题在于供应通常少于需求,因此,定制订单表包含分配优先级值,该值显示每个客户订单在接收产品时的排名。
将生产订单中的数量分配给客户订单中的订单数量的最佳方法是什么?请注意,您不能为每个客户订单分配比订购的更多。
我可以通过创建WHILE循环并按行逐行进行产品分配来实现这一点,但速度非常慢。
有没有更快的基于集合的方法来解决这个问题?
答案 0 :(得分:0)
我没有要测试的数据。这不会尝试填充部分数量。
select orders.custID, orders.priority, orders.prodID, orders.qty, SUM(cumu.qty) as 'cumu'
from orders
join orders as cumu
on cumu.prodID = orders.prodID
and cumu.priority <= orders.priority
join available
on availble.prodID = orders.prodID
group by orders.custID, orders.priority, orders.prodID, orders.qty
having SUM(cumu.qty) < availble.qty
order by orders.custID, orders.priority, orders.prodID