3

各アイテム番号が複数の場所にある倉庫があります。どこから選ぶかの優先順位があります。

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

ピックリストを 3 番目のテーブルに入力します。

item_1 loc_1 3
item_1 loc_2 1
item_2 loc_1 2

単純に結合すると、item_1 の 3 つの行が得られます

RBARではなく、Row By Agonizing Rowループで単一のSQLステートメントで実行したいと思います。

私はMssql 2008を使用しています

4

1 に答える 1

0

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

于 2013-12-20T12:55:37.240 に答える