2017-08-11 11 views
-1

私は私のオリジナルのポストへのフォローアップの質問を持っている(MySQL Compare pricesMySQLの価格&在庫比較

は私がTABLE1、次の列を含むを持っているとしましょう。

例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の助けによって(達成していることは、次の(基本的には、製品の最も安い価格で供給を示して)表示するTABLE1のためである:

もつとも

例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 

:最も安い価格と供給者の株式は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

こんにちは、これは、比較から在庫がない製品を削除します。私は十分にはっきりしていないと思うので、もう一度試してみましょう。在庫が最も安い商品を表示する方法はありますか?ただし、その商品がどこにも在庫されていない場合は、在庫があるかどうかにかかわらず最も安い商品を表示しますか?どうもありがとうございました – Johnny

+0

私はちょうどあなたの 'SAMPLE C'です期待された結果を与えています –

関連する問題