2011-09-09 34 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