2011-08-02 3 views
0

PO 수량 및 SO 수량을 계산하는 쿼리를 만들었습니다. 문제는 SO 수량에 대해 다른 SO 수량으로 동일한 제품에 대해 두 행을 얻는다는 것입니다. 내가하고 싶은 일은 동일한 제품의 SO 수량을 더하고 database.Please에게 알려주는 단일 행으로 표시하는 것입니다. 단지 outstandingsoqty가 다른 제품 코드는 동일 위의 출력같은 id의 두 레코드를 결합하는 sql 쿼리

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 

:

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 

내가 쿼리 얻을 출력은 다음입니다 :

다음

내가 작성한 쿼리입니다 . outstandingsoqty를 추가하고 두 행을 하나의 단일 행으로 표시하려고합니다. 다른 제품 판매 주문과 동일한 제품 코드에 대해 다른 outstandingsoqty가 있습니다.

다음 링크에서 출력 이미지를 확인할 수 있습니다 이것에 간단한 방법이 있습니다 http://qedlr.fhmto.servertrust.com/v/vspfiles/assets/images/queryresult.png

+0

sql 출력을 포맷하고 원하는 출력 예를 제공하면 더 나은 응답을 얻을 수 있습니다. – vickirk

+0

GROUP BY를 사용하고 수량을 합합니다. –

+0

만약 내가 outstandingsoqty 나는 동일한 제품 코드에 대한 두 개의 서로 다른 행을 합계. 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

outstandingsuqty는 orders.OrderStatus <> 'Canceled'및 orders.OrderStatus <> 'Shipped'및 orders.OrderStatus <> 'Returned'수량의 합계가됩니다. 제발 조언. 이제는 모든 주문 수량의 합계를 내고 있습니다 – user818671

+0

outstandingsoqty 서브 쿼리에 ** det1.OrderID = orders.OrderID **를 추가하십시오. 그에 따라 수정 된 쿼리 –

+0

고마워 내 문제를 해결했습니다 – user818671

관련 문제