2015-11-03 59 views
0

我有一个商业问题,就是要找到一个产品最优惠的价格出售需要提醒的是,当竞价应该是卖方最大最优惠的价格。复杂的连接SQL SERVER

有三个表格如下 - 目录表(所有可销售的零件),零件零售商表(零售商销售的零件表有效),零售商零件表价格(零部件通常不卖,但零售商可以出售它们)。

因此,条件是: 1.一种部分必须编目出售。从零售商部分表 2.价格将被呈现给在价格顺序(第一最低)的用户。 3.如果零售商不正常出售一部分,但可以把它卖掉,他可以竞标价格是他可以卖最低的,但我们想呈现的最高价到用户的报价,但低于通常通过零售销售的最低价格。

例: 产品= P,3个零售商出售p在价格RP1..3,1个零售商不销售P,但可以卖P和他的出价BP1定为最低价格。

如果Rp1..3 = 10,34,56和BP1 = 5时,销售价格是9.99(10-0.01)由Bid零售商1.

如果BP1 = NULL,售价为10(由R1) 如果BP1 = 12,销售价格为10(由R1)

如果几个零售商竞标价格,那么选择具有最低最低价格的人,但是使用相同的价格-0.01来计算实际价格。

我一直在与目录表和零售商表和所有的作品,但投标表的缘故,我的一些问题。为了避免编写的变化我想保持在SQL的变化只,然后系统可以保持不变。

我有我的尝试下面这些不工作,但我认为这基本上是从语法错误纠正一边,不包括0.01计算或选择,当我们有多个投标人。

select trp.ManPartNumber, r.retailername,r.retailerid, 
trp.retailerparturl, trp.partprice from trahanretailerpart trp inner 
join trahanpart tp on trp.manpartnumber = tp.manpartnumber and 
trp.manpartnumber = 'PM BAS C' and trp.currentpart = 1 and 
trp.currencyid = 1 inner join trahanretailer r on trp.retailerid = 
r.retailerid inner join trahanshop s on s.shopid= trp.shopid and 
s.shopname = 'Bristan' as retailerparts outer join on (select 
trp.ManPartNumber, r.retailername, r.retailerid, 'soogr.com' as 
retailerparturl, trp.minpartprice as partprice from trahanbestprice 
trp inner join trahanpart tp on trp.manpartnumber = tp.manpartnumber 
and trp.manpartnumber = 'PM BAS C' and trp.liveprice = 1 and 
trp.currencyid = 1 inner join trahanretailer r on trp.retailerid = 
r.retailerid inner join trahanshop s on s.shopid= trp.shopid and 
s.shopname = 'Bristan') as minpriceparts on minpriceparts.partprice < 
retailerparts.partprice and retailerparts.retailerid != 
minpriceparts.retailerid order by minpriceparts.partprice asc, 
retailerparts.partprice asc 

因此trahanpart是目录表,trahanretailerpart是零售商表,trahanbestprice是出价表。 Trahanshop,trahanretailer仅用于品牌和零售商的名字。该部分号码可跨品牌被复制(在设计历史原因又名店),trahanshop应该叫trahanbrand。

有任何人任何想法?

回答

0

我通过使用UNION,然后一些处理逻辑中的代码,以除去重复行解决了这个。这一切正常,我测试了它。