日期:2014-05-17  浏览次数:20543 次

请教一段业务可以用sql写出来么?
请教一段sql怎么写。有单位要采购一些东西,提供商有很多,但价格不同,而且每个厂商的东西有限。
想按如下规则购买,优先购买价格最便宜的厂商的货物,卖完后看看每个厂商还能剩余多少。这个可以用sql写出来么?
只有这么多分了,要有人能帮忙以后有分再给。

产品表
产品ID 购买量
101 15
102 30
103 10

价格表
产品ID 厂商 价格 库存
101 200 10 10
101 201 11 10
101 202 8 20
102 210 20 11
102 211 21 20
102 214 18 20
103 222 20 10
103 224 10 10

如下表为预期的结果表:
剩余库存
产品1 厂商 价格 库存
101 200 10 10
101 201 11 10
101 202 8 5
102 210 20 1
102 211 21 20
102 214 18 0
103 222 20 10
103 224 10 0

临时表已经创建好了,哪位能帮忙,十分感谢

select 101 产品ID,15 购买量 into [#产品表]
union select 102 产品ID,30 购买量
union select 103 产品ID,10 购买量

select 101 产品ID,200 厂商,10 价格,10 库存 into [#价格表]
union select 101 产品ID,201 厂商,11 价格,10 库存
union select 101 产品ID,202 厂商,8 价格,20 库存
union select 102 产品ID,210 厂商,20 价格,11 库存
union select 102 产品ID,211 厂商,21 价格,20 库存
union select 102 产品ID,214 厂商,18 价格,20 库存
union select 103 产品ID,222 厂商,20 价格,10 库存
union select 103 产品ID,224 厂商,10 价格,10 库存

------解决方案--------------------
select 101 产品ID,15 购买量 into [#产品表]
union select 102 产品ID,30 购买量
union select 103 产品ID,10 购买量

select 101 产品ID,200 厂商,10 价格,10 库存 into [#价格表]
union select 101 产品ID,201 厂商,11 价格,10 库存
union select 101 产品ID,202 厂商,8 价格,20 库存
union select 102 产品ID,210 厂商,20 价格,11 库存
union select 102 产品ID,211 厂商,21 价格,20 库存
union select 102 产品ID,214 厂商,18 价格,20 库存
union select 103 产品ID,222 厂商,20 价格,10 库存
union select 103 产品ID,224 厂商,10 价格,10 库存


select 产品ID,厂商,价格,剩余量=case when 剩余量>=0 then 0 when 库存<=-剩余量 then 库存 else -剩余量 end
from
(
select a.* ,剩余量=b.购买量-(select sum(库存) from #价格表 t where a.产品ID=t.产品ID and t.价格<=a.价格)
from #价格表 a
inner join #产品表 b on a.产品ID=b.产品ID
)t

/*
产品ID    厂商    价格   剩余量
------------------------------------