我有一个仓库,每个项目编号可以在多个位置。 我有一个首选订单从哪里挑选。
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
答案 0 :(得分: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