2012-09-11 145 views
2

我寫在SQL Server中的存儲過程,並希望有人能提出一個計算效率更高的方式來處理這個問題:最佳途徑

我有表包含3000個訂單項的客戶訂單(即「產品需求」)數據。每個記錄表示特定產品的訂購數量。

我還有另一張生產訂單(即「產品供應」)數據,其中包含大約200個訂單項。每個記錄表示每種特定產品的可用數量。

問題是通常供應少於需求量,因此,自定義訂單表包含一個分配優先級值,該值顯示每個客戶訂單的排列順序以接收產品。

將生產訂單中可用數量分配給客戶訂單中訂單數量的最佳方式是什麼?請注意,您無法爲每個客戶訂單分配更多的訂單。

我可以通過創建一個WHILE循環並逐行地分配逐個產品的分配,但它非常慢。

有沒有更快的基於集合的方式來解決這個問題?

+0

什麼版本的sql-server? – Taryn

+0

你目前的逐行邏輯是什麼樣的? – mellamokb

+0

[This](http://stackoverflow.com/questions/9420173/sql-subtracting-a-depleting-value-from-rows)可能會有所幫助。 – HABO

回答

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 
+0

太棒了!我還沒有對它進行測試,但我同意你的方法只處理完整分配,但是這將覆蓋我之後可以遵循的大於90%的訂單,並通過執行剩餘的部分分配進行清理。 –

+0

謝謝,Blam的幫助指針! –

+0

如果將其更改爲cumu.priority Paparazzi