簡體   English   中英

從多個位置挑選足夠的物品而不做rbar

[英]pick enough items from several locations without doing rbar

我有一個倉庫,每個項目編號可以在幾個地方。 我有一個首選訂單從哪里挑選。

ITEM   LOC   IN_STOCK
item_1 loc_1 3
item_1 loc_2 3
item_1 loc_3 2
item_2 loc_1 4

首選順序是位置名稱的函數,為了簡單起見,我們只能說它是order by loc asc

我有一個訂單

item_1 4
item 2 2

我想要一個選項列表進入第三個表。

item_1 loc_1 3
item_1 loc_2 1
item_2 loc_1 2

如果我只是加入,我會得到三行item_1

我想在單個sql語句中執行它,而不是RBAR,Row By Agonizing Row循環。

我正在使用Mssql 2008

請嘗試使用CTE:

;with T as(
  select *,ROW_NUMBER() over(partition by item order by in_stock, LOC desc) RNum
  From warehouse)
select 
    x.Item,
    x.Loc,
    (case when SM-ItemNum<=in_stock then SM-ItemNum else in_stock end) as in_stock
From(
    select *,(select SUM(b.In_stock) from T b where b.item=a.item and b.RNum<=a.RNum) SM
    from T a
)x inner join orders c on x.item=c.item
where SM-ItemNum>0

在這里檢查解決方案SQL Fiddle Demo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM