2011-07-25 5 views
0

のは、私はこれらの2つのテーブルがあるとしましょう:製品とストレージ別のテーブルに関連レコードの合計にテーブルの各レコードに整数フィールドを比較

製品のProductIdがあり、各レコード

ためQuantityAvailable

ストレージには、レコードごとにLocationId、ProductId、およびQuantityAvailableがあります(ProductIdは製品テーブルへのFKです)。 'ProductId'は複数のLocationIdに格納できるため、ProductIdとLocationIdは複合主キーを構成します。

「Product」がストレージにあるかどうかを判断できるSQLクエリーが必要です。その場合は、累積ストレージの「Quantity」が「QuantityAvailable」よりも小さい場合に使用します。

簡単に言えば、ストレージ表の関連するすべての項目の「数量」の合計が製品表の「QuantityAvailable」より小さいProduct表のすべてのProductIdのリストが必要です。

これを(テーブル構造を変更せずに)どのように達成できますか?

おかげ

答えて

0

は、次のクエリは、あなたの各製品の数量の合計を与える:

select ProductID, sum(Quantity) as ProductQuantity 
from 
    Storage 
group by 
    ProductID 

は今、あなたは単に、派生テーブルとしてそのクエリを使用し、それに参加し、比較する必要がありますあなたの2つの数量:

select 
    * 
from 
    Product p 
    inner join (
     select ProductID, sum(Quantity) as ProductQuantity 
     from 
      Storage 
     group by 
      ProductID) q 
     on p.ProductID = q.ProductID 
where 
    q.ProductQuantity < p.QuantityAvailable 
+0

ありがとう、私はこれを働かせましたが、ストレージテーブルに一致がない場合でも、製品テーブルからすべての製品IDをリストする方法を教えてください。 (ProductquantityにNULLを表示する) – normanram

+0

内部結合を左結合に変更します。 –

+0

ちょうど私が左の結合でそれを理解したことを投稿しようとしていた。ありがとう。 – normanram

関連する問題