2015-11-03 98 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,然後一些處理邏輯中的代碼,以除去重複行解決了這個。這一切正常,我測試了它。