2010-01-05 6 views
74

Я пытаюсь установить значение в одной таблице на сумму значений в другой таблице. Что-то вдоль этих линий:Агрегатная функция в запросе обновления SQL?

UPDATE table1 
SET field1 = SUM(table2.field2) 
FROM table1 
INNER JOIN table2 ON table1.field3 = table2.field3 
GROUP BY table1.field3 

Конечно, так как это означает, что не будет работать - SET не поддерживает SUM и он не поддерживает GROUP BY.

Я должен знать это, но мой разум рисует пробел. Что я делаю не так?

+0

+1 : Оценил обновление –

ответ

118
UPDATE t1 
SET t1.field1 = t2.field2Sum 
FROM table1 t1 
INNER JOIN (select field3, sum(field2) as field2Sum 
    from table2 
    group by field3) as t2 
on t2.field3 = t1.field3 
+36

Я поставил три запроса бок о бок и выполнил план выполнения. Этот ответ стоил 5%. – Margaret

+3

+1: Спасибо Маргарет за информацию –

+0

+1 Это очень полезно. – gotqn

7

Использование:

UPDATE table1 
    SET field1 = (SELECT SUM(t2.field2) 
        FROM TABLE2 t2 
        WHERE t2.field3 = field2) 
+11

Я поставил три запроса бок о бок и выполнил план выполнения. Этот ответ стоил 44%. – Margaret

5

Или вы могли бы использовать смесь из JBrooks и OMG Ponies ответов:

UPDATE table1 
    SET field1 = (SELECT SUM(field2) 
        FROM table2 AS t2 
        WHERE t2.field3 = t1.field3) 
    FROM table1 AS t1 
+13

Я поставил три вопроса бок о бок и выполнил план выполнения. Этот ответ стоил 51%. – Margaret

+0

Okie dokie! И спасибо за отзывы. Я добавлю его в свою панель инструментов. :-) –

+2

+1: Ждал, чтобы посмотреть, какая цена была :) –

3

хорошей ситуации, чтобы использовать CROSS ОТНОСИТЬСЯ

UPDATE t1 
    SET t1.field1 = t2.field2Sum 
    FROM table1 t1 
CROSS APPLY (SELECT SUM(field2) as field2Sum 
       FROM table2 t2 
       WHERE t2.field3 = t1.field3) AS t2 
Смежные вопросы