2011-08-02 170 views
0

我已經創建了一個查詢來計算PO數量和SO數量。問題是,對於SO數量,我得到兩個相同的產品與不同的SO數量。我想要做的是爲相同的產品添加SO數量,並將其顯示爲數據庫中的單個行。請告知。sql查詢合併兩個具有相同ID的記錄

以下是我寫的查詢:

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並將兩行顯示爲一行。 對於同一產品代碼,它們對於不同的未結銷售訂單具有不同的優秀代碼。

您可以通過下面的鏈接檢查輸出的圖像: http://qedlr.fhmto.servertrust.com/v/vspfiles/assets/images/queryresult.png

+0

如果格式化sql,輸出並給出所需輸出的示例,則可能會得到更好的響應 – vickirk

+0

使用GROUP BY和SUM數量。 –

+0

如果我總結outstandingsoqty我得到兩個不同的行相同的產品代碼。只有優秀代理商中的數字發生變化。 – user818671

回答

0

有簡單的方法來此。不要在預期大型結果集的地方使用Group,這會使查詢變慢,而是使用子查詢。

做到這一點的方法:

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 <>'取消'和orders.OrderStatus <>'發貨'和orders.OrderStatus <>'返回'的數量總和。請指教。現在它給我所有訂單數量的總和 – user818671

+0

在outstandingsoqty子查詢中添加** det1.OrderID = orders.OrderID **。修改查詢相應 –

+0

非常感謝它解決了我的問題 – user818671