2017-08-11 96 views
-1

我有一個後續的問題我原來的職位(MySQL Compare pricesMySQL的價格與股票比較

可以說我有一個包含以下幾列表1;

例A)

|item |partnumber |supplier |stock |cost 
CD  11A   West  11  10.11 
CD  11A   East  0  10.00 
USB  BBB   North  1  125.01 
USB  BBB   West  1  101.10 

現在我已經實現了什麼(由@Ali的幫助)是表1顯示了以下(這基本上顯示了最便宜的價格供​​貨商的產品):

實施例B)

|item |partnumber |supplier |stock |cost 
CD  11A   East  0  10.00 
USB  BBB   West  1  101.10 

This is the code for EXAMPLE B that is working: 

SELECT a.name , a.partnumber , a.supplier , a.cost FROM table1 a JOIN (
SELECT name , partnumber , MIN(cost) cost 
FROM table1 
GROUP BY name , partnumber) 
b ON a.name = b.name AND a.cost = b.cost AND a.partnumber = b.partnumber 

但是:IF與最便宜的價格供​​應商的庫存是0,但另一個供應商有超過0庫存沉綿價格不是最便宜的,我怎麼能做到這一點?下面的例子中西方將採取東的地方如下:

的C)

|item |partnumber |supplier |stock |cost 
    CD  11A   West  11  10.11 
    USB  BBB   West  1  101.10 

更清晰;總是向供應商展示庫存中最便宜的產品,除非最便宜的供應商沒有庫存中的產品,但是另一個供應商在這種情況下顯示該產品。那麼,我怎樣才能達到例子C)?

非常感謝!

+0

顯示你做了什麼/試過至今。 –

+0

@reds我已將代碼添加到 – Johnny

+0

您的'C'是預期結果嗎? –

回答

0

你是否嘗試過在子查詢中添加where條件?

 
SELECT a.name , a.partnumber , a.supplier , a.cost 
FROM table1 a 
JOIN (
    SELECT name , partnumber , MIN(cost) cost 
    FROM table1 
    where stock > 0 
    GROUP BY name , partnumber 
    ) b ON a.name = b.name AND a.cost = b.cost AND a.partnumber = b.partnumber 
0

試試這個:

select a.item,a.partnumber,b.supplier,a.stock,min(a.cost) from 
(select item,partnumber,supplier,stock,min(cost) cost from 
(select * from table1) as a where stock !=0 
group by item,partnumber) as a 


LEFT JOIN 

(select item,partnumber,supplier,stock,cost from 
(select * from table1) as a where stock !=0) as b 
on a.cost = b.cost 
group by a.item,a.partnumber 

結果:

CD 11A West 11 10.11 
USB BBB West 1 101.1 
+0

嗨,這將刪除比較中沒有存貨的任何產品。我覺得我不夠清楚,所以我會再試一次;有沒有一種方法可以顯示庫存中最便宜的物品,但是如果且僅當物品沒有存貨時,才顯示最便宜的物品,而不管物品是否有庫存或不存在?非常感謝@reds – Johnny

+0

我只是給你預期的結果,這是你的'SAMPLE C' –