首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一段业务可以用sql写出来么

2013-12-28 
请教一段业务可以用sql写出来么?请教一段sql怎么写。有单位要采购一些东西,提供商有很多,但价格不同,而且每

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

产品表
产品ID购买量
10115
10230
10310

价格表
产品ID厂商价格库存
1012001010
1012011110
101202820
1022102011
1022112120
1022141820
1032222010
1032241010

如下表为预期的结果表:
剩余库存
产品1厂商价格库存
1012001010
1012011110
10120285
102210201
1022112120
102214180
1032222010
103224100

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


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    厂商    价格   剩余量
------------------------------------
1012001010
1012011110
10120285
102210201
1022112120
102214180
1032222010
103224100

*/

热点排行