2017-04-21 19 views
1

あいまいな質問に対する謝罪、これまでに質問されたことがある場合は、質問を明確にすることが難しくなりました。結合の結果を制限する

私は3つのテーブルを持っています。ロットおよびSalesorder、およびOrde​​rLot:

Lot  SKU CreationDate 
------------------------- 
1000-a 1000 2017-04-12 
1000-b 1000 2017-04-13 
2000-a 2000 2017-04-12 
2000-b 2000 2017-04-13 

SalesorderID Revenue 
----------------------------- 
1    $500 
2    $250 
3    $125 


OrderLotID SalesorderID Lot 
------------------------------ 
1    1   1000-a 
2    1   2000-a 
3    2   1000-b 
4    2   2000-b 
5    3   1000-a 

私は私にSalesOrderでたくさんの作成日与えられた生成総収入を与える参加をしたいと思います。

たとえば、私は2017-04-12のCreationDateを使用して$ 625の結果を得たいと考えています(この日に1000-aと2000-aが作成され、 SalesorderID 1と3)。しかし、私が現在使用しているジョインは、Salesorder 1では2行、Salesorder 3では1行を返し、結果は$ 1125です。

OrderLotから返される行を制限して、一意のSalesorderの収益のみがカウントされるようにするにはどうすればよいですか?

おかげで、

ジェフ

編集。現在のクエリは次のとおりです。

select sum(so.revenue) 
from salesorder so 
inner join orderlot ol on so.lot = ol.lot 
inner join lot l on ol.lot = l.lot 
where l.creationdate = '2017-04-12' 
+0

訂正する必要があるものを理解するために試行されたクエリは役に立ちます – Degan

+0

したがって、売上はsalesOrderID1で合計500であり、ロットごとにどのような収入があるのか​​分かりません。 – xQbert

+0

修正します。実用上の問題は、生産日にどのくらいの収入を得たかということです。注文はロットで「満たされています」。だから私は、指定された日付に生産されたロットで満たされたすべての注文の収入を得る必要があります。 – JeffO

答えて

1
SELECT SUM(s.Revenue) 
FROM SalesOrder s 
INNER JOIN (
    SELECT DISTINCT SalesOrderID 
    FROM Lot l 
    INNER JOIN OrderLot ol on ol.Lot = l.Lot 
    WHERE l.CreationDate = @CreationDate 
) t ON T.SalesOrderID = s.SalesOrderID 

OR

SELECT SUM(s.Revenue) 
FROM SalesOrder s 
WHERE s.SalesOrderID IN (
    SELECT DISTINCT SalesOrderID 
    FROM Lot l 
    INNER JOIN OrderLot ol on ol.Lot = l.Lot 
    WHERE l.CreationDate = @CreationDate 
) 

私は理解しIN()条件と第二の選択肢は少し簡単に見つけることが、それはする傾向があるように私は、JOIN可能な場合の方に傾く傾向にあります私の経験で少し上手くやってみてください。もっと複雑なものに適応させる方が簡単です。そして、いつものように、パフォーマンスがそれほど重要であれば、実際にクエリをプロファイリングして実行計画を確認する必要があります。オプティマイザは常にあなたを驚かせることができます。

+0

私はdistinctを使用してサブクエリを行うことについて考えましたが、何らかの理由でそれが正しく見えませんでした。なぜ私が気にかけているのか分かりません(これは私が書いているちょっとしたツールです)が、「別個」を避ける方法があると思いました。 – JeffO

+0

代わりにいつでも "GROUP BY"することができます。 –

関連する問題