Обновление Выберите на основе Агрегатной функции "SUM": - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть 3 таблицы, которые приведены ниже:

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: // Это табличная переменная

* * 1010

Здесь, исходя из вышеуказанных 3 таблиц. Я хочу обновить PODetail StatusID = 4, когда SUM (AcceptedQty) MRVDetail для PODetailID = POQuantity табличной переменной @PODetail для конкретного PODetailID.

Как этого добиться?

Я пробовал приведенное ниже заявление об обновлении. Но это совсем не работает. Как это сделать? Пожалуйста, помогите мне.

    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

1 Ответ

2 голосов
/ 09 сентября 2011
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/

...