2016-03-20 12 views
0

の乗数を持っています戻り値はSum(OrderDetails.Quantity) AS QuantityOrdered列に乗数があります。最初の行は4の乗数を持ち、2番目の列は3の乗数を持ち、3番目の行は2の1つを持ちます。他の行はすべて正常です。Sum(Inventory.Quantity) AS QuantityOnHand列は乗数なしの正しい数値を返します。SQL文の結果は、私は次のようであるSQL文を持っているのMySQLの問題を抱えています最初の3行

最初の3行まで一致するProdcutIDに関連するOrderDetailsテーブルの値を編集しました。私はそれらのそれぞれのために量を1に変更し、私はそれぞれ4,3、および2を得る。

+0

あなたはいくつかのサンプルデータと期待される結果を表示することができますか? – AKS

+0

あなたは 'LEFT JOIN'を通して複数の行を持っています、私は賭けたいと思います。 – dkarp

+0

3つのテーブル間にクロス積を作成しています。したがって、 'OrderDetails.Quantity'に' ProductID'を持つ 'Inventory'行の数を掛けます。 – Barmar

答えて

1

あなたが別の数()、次のようにサブクエリを試す必要があります。

Select Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
, (select Sum(Quantity) from OrderDetails where ProductID = Products.ProductID) AS QuantityOrdered 
, (select Sum(Quantity) from Inventory where ProductID = Products.ProductID) AS QuantityOnHand 
From Products 

たり、注文から製品のみが必要な場合:

Select Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
, Sum(Quantity) AS QuantityOrdered 
, (select Sum(Quantity) from Inventory where ProductID = Products.ProductID) AS QuantityOnHand 
From Products JOIN OrderDetails USING(ProductID) 
group by Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
+0

最初の解決策はありました –

1

をあなたは、その結果、二つの異なる次元に沿って集計されているが各製品の在庫と注文詳細のデカルト積 - sum()がオフであることは間違いありません。これを解決する

典型的な方法は、各次元に沿ってに参加する前を集約することである。

Select p.ProductID, p.ModelNumber, p.SerialNumber, p.Description, p.ListPrice, 
     od.QuantityOrdered, i.QuantityOnHand 
From Products p LEFT JOIN 
    (select od.ProductId, Sum(od.Quantity) as QuantityOrdered 
     from OrderDetails 
     group by od.ProductdId 
    ) od 
    USING (ProductID) LEFT JOIN 
    (select i.ProductId, Sum(Inventory.Quantity) as QuantityOnHand 
     from Inventory i 
     group by i.ProductId 
    ) i 
    USING (ProductID); 
+0

これは動作しますが、編集が必要です。 pを製品などに置き換える。 –

+0

@ PerLarsen。 。 。私はあなたがそれによって何を意味するか分からない。テーブルのエイリアスを使用すると、クエリの書き込みと読み込みが簡単になります。 –

関連する問題