2017-07-04 16 views
1

目的は、売上と値を持つすべての売り手のリストをグリッドに表示することです。LEFT JOINとWHERE句 - 値がNULLのものを含むすべてのレコードを一覧表示する

売り手のリストは、売り上げがない場合でも常に表示する必要があります。次のクエリが正常に動作していることについては

seller | sales | value 
John  10  1000 
Marie  20  2000 
Jamie  15  1500 
Arnold  0   0 
Peter  0   0 

::のような

何か

SELECT tsl.sellers, 
     COUNT(ts.sales) AS sales, 
     COALESCE(SUM(ts.value),0) AS value 
FROM tab_sellers tsl 
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller 
GROUP BY tsl.seller  

私は日付範囲でフィルタする必要があるときに問題があります。

SELECT tsl.sellers, 
     COUNT(ts.sales) AS sales, 
     COALESCE(SUM(ts.value),0) AS value 
FROM tab_sellers tsl 
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller 
WHERE ts.date_sale BETWEEN '2017-05-01' and '2017-07-04' 
GROUP BY tsl.seller 

だけジョンとマリーはこの日付範囲内の販売を持っていることを考慮すると、結果は次のとおりです。

seller | sales | value 
John  5  500 
Marie  10  1000 

しかし、意図した結果は次のとおりです。

seller | sales | value 
John  5  500 
Marie  10  1000 
Jamie  0   0 
Arnold  0   0 
Peter  0   0 

私は解決するためのアイデアを高く評価この。

+0

別のWHERE-Statementはどうですか? – Bernhard

+0

LEFT JOINは、INNER JOIN行と、NULLで拡張された不一致の左テーブル行を返します。範囲条件をONにする必要があります。 – philipxy

+0

@philipxy、私の答えと同じです。 –

答えて

2

whereの代わりにAndの配置を入れてください。クエリ以下

試してみてください。これは参考になりましかもしれ

SELECT tsl.sellers, 
     COUNT(ts.sales) AS sales, 
     COALESCE(SUM(ts.value),0) AS value 
FROM tab_sellers tsl 
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller AND ts.date_sale BETWEEN '2017-05-01' and '2017-07-04' 
GROUP BY tsl.seller 

希望。

+0

ありがとうございます@chirag。正常に動作します。あなたの解決策は私を助けてくれました。 – josei

+1

あなたは受け入れられるとマークすることができますので、他の人に役立ちます –

+0

システムは私にそれを受け入れることはできません。マークのために1分待つと言う。編集:完了。再度、感謝します。 – josei

関連する問題