2

我正在 SQL Server 中编写一个存储过程,希望有人能提出一种计算效率更高的方法来处理这个问题:

我有一个包含 3000 个行项目的客户订单(即“产品需求”)数据表。每条记录表示特定产品的订单数量。

我还有另一个生产订单表(即“产品供应”)数据,其中包含大约 200 个行项目。每条记录表示每个特定产品的可用数量。

问题是供应通常少于需求,因此,自定义订单表包含一个分配优先级值,该值显示每个客户订单在接收产品的队列中的位置。

将生产订单中的可用数量分配给客户订单中的订单数量的最佳方法是什么?请注意,您分配给每个客户订单的数量不能超过已订购的数量。

我可以通过创建一个 WHILE 循环并逐个产品、逐行地分配产品来做到这一点,但它非常慢。

有没有更快的基于集合的方法来解决这个问题?

4

1 回答 1

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
于 2012-09-11T22:47:06.740 回答