2011-09-09 97 views
0

我有3個表被如下:基於聚合函數 「SUM」 更新選擇:

PODetail:

 PODetailID  POID  ItemID  POQuantity  StatusID 
    ------------  ------ -------- ------------  ---------- 
      1    1   10   8.00    2 
      2    1   17   33.00    2 
      3    2   1   7.00    2 

MRVDetail:

 MRVDetailID  AcceptedQty   PODetailID 
    -------------- -------------  ------------ 
      1    3.00     3 
      2    4.00     3 
      3    10.00     4 

@Detail://它是表變量

 PODetailID   POQuantity 
    ------------   ------------ 
      3     7 

這裏,基於在上面的3張桌子上。當PODetailID = POVQuantity表變量@PODetail到特定的PODetailID時,我想將PODetail StatusID = 4更新爲PODetail StatusID = 4時的最小值(最大值) 。

如何實現這一目標?

我試過下面的更新聲明。但它根本不起作用。這個怎麼做?請幫幫我。

UPDATE 
    PODetail 
SET 
    PODetail.StatusID = 4 
FROM 
     PODetail 
INNER JOIN @Detail P ON PODetail.PODetailID = P.PODetailID 
INNER JOIN MRVDetail ON MRVDetail.PODetailID = P.PODetailID 
WHERE 
(SELECT SUM(AcceptedQty) FROM MRVDetail WHERE MRVDetail.PODetailID = P.PODetailID) = P.POQuantity 
    AND PODetail.POID = 2 
+0

是否查詢產生錯誤或只是沒有更新? – ipr101

+0

沒有錯誤。上述查詢不會選擇任何問題的行。 – thevan

回答

2
UPDATE PODetail 
SET StatusID = 4 
WHERE PODetailID IN (SELECT d.PODetailID 
         FROM @Detail AS d 
         INNER JOIN (SELECT PODetailID, 
             SUM(AcceptedQty) AS Qty 
            FROM MRVDetail 
            GROUP BY PODetailID) AS m 
         ON d.PODetailID = m.PODetailID AND 
         d.POQuantity = m.Qty) 

http://data.stackexchange.com/stackoverflow/q/112195/

+0

非常感謝。它的工作正常。 – thevan