2011-08-02 25 views
0

私はPO数量とSO数量を計算するためのクエリを作成しました。問題は、SOの量のために、私は異なったSOの量で同じ製品のために2列を得ることです。私がしたいことは、同じ製品のSO量を追加し、それをデータベースの単一の行として表示することです。助言してください。同じIDを持つ2つのレコードを結合するsqlクエリ

私が書かれているクエリを以下に示します。

SELECT DISTINCT products.ProductCode, 
       products.ProductName, 
       pe.stockreorderqty, 
       pe.stocklowqtyalarm, 
       products.StockStatus, 
       pe.lastpo_qty, 
       pe.lastpo_date, 
       pe.vendor_price, 
       Sum(PO_Items.POI_Quantity) - Sum(PO_Items.POI_QtyReceived) AS OutstandingPOQty, 
       orderdetails.Quantity as outstandingsoqty 
FROM Products INNER JOIN Products_Extended pe WITH (NOLOCK) ON products.ProductID = pe.ProductID 
LEFT JOIN PO_Items ON products.ProductCode = PO_Items.POI_ProductCode 
LEFT JOIN orderdetails 
INNER JOIN orders ON orderdetails.OrderID = orders.OrderID ON orderdetails.productcode = products.productcode 
    AND orders.OrderStatus <>'Cancelled' 
    AND orders.OrderStatus <>'Shipped' 
    AND orders.OrderStatus <>'Returned' 
GROUP BY products.ProductCode, products.ProductName, pe.stockreorderqty, 
     pe.stocklowqtyalarm, products.StockStatus, pe.lastpo_qty, 
     pe.lastpo_date, pe.vendor_price, orderdetails.Quantity 

私は、クエリのために取得する出力は以下の通りです:上記の出力で

productcode 
productname 
stockreorderqty 
stocklowqtyalarm 
stockstatus 
lastpo_qty 
lastpo_date 
vendor_price 
outstandingpoqty 
outstandingsoqty 
10195 
Carclo 19° Frosted 20mm Lens - No Holder 
0 
5 
120 
300 
06/16/11 09:32 PM 
1.05 
0 
50 

Carclo 19° Frosted 20mm Lens - No Holder 
0 
5 
120 
300 
06/16/11 09:32 PM 
1.05 
0 
56 

プロダクトコードが同じであるだけoutstandingsoqtyが異なります。私はoutstandingsoqtyを追加し、2行を1行として表示したいと思います。 これらは、同じ製品コードに対して異なる未処理受注のために異なるoutstandingsoqtyを持っています。

あなたは、次のリンクでの出力のための画像を確認することができます。これまでに簡単な方法があります http://qedlr.fhmto.servertrust.com/v/vspfiles/assets/images/queryresult.png

+0

sql、出力をフォーマットし、希望する出力の例を与えると、より良い応答を得ることができます – vickirk

+0

GROUP BYを使用して数量を合計します。 –

+0

もし私がoutstandingsoqtyを合計すると、私は同じproductcodeに対して2つの異なる行を得ます。 outstandingsoqty内の数字だけが変更されます。 – user818671

答えて

0

。大きな結果セットが予想される場所でグループを使用しないでください。クエリが遅くなり、代わりにサブクエリを使用します。

は、この方法を実行します。

SELECT DISTINCT [OTHER Fields], 
(SELECT Sum(PO_Items.POI_Quantity) - Sum(PO_Items.POI_QtyReceived) FROM PO_Items WHERE PO_Items.POI_ProductCode = products.ProductCode) as OutstandingPOQty, 
(SELECT Sum(det1.Quantity) FROM orderdetails AS det1 WHERE det1.productcode =products.productcode and det1.OrderID=orders.OrderID) as outstandingsoqty 
FROM Products 
INNER JOIN Products_Extended pe WITH (NOLOCK) ON products.ProductID = pe.ProductID 
LEFT JOIN orderdetails INNER JOIN orders ON orderdetails.OrderID = orders.OrderID ON orderdetails.productcode = products.productcode 
and orders.OrderStatus <>'Cancelled' and orders.OrderStatus <>'Shipped' and orders.OrderStatus <>'Returned' 

は、それはかなり速くなります。それが役に立てば幸い。

+0

outstandingsoqtyは、orders.OrderStatus <> 'Canceled'およびorders.OrderStatus <> 'Shipped'およびorders.OrderStatus <> 'Returned'の量の合計になります。お知らせ下さい。今はそれが私にすべての注文数量の合計を与えています – user818671

+0

** ** outstanding1.rderID = orders.OrderID **をoutstandingsoqtyサブクエリに追加しています。それに応じて修正されたクエリ –

+0

ありがとうございました。私の問題を解決してくれてありがとうございます – user818671

関連する問題