2010-01-05 14 views
74

Estoy tratando de establecer el valor en una tabla a la suma de los valores en otra tabla. Algo a lo largo de estas líneas:¿Función agregada en una consulta de actualización SQL?

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

Por supuesto, ya que esto significa, que no funcionará - SET no soporta SUM y no apoyar GROUP BY.

Debería saber esto, pero mi mente está dibujando un espacio en blanco. ¿Qué estoy haciendo mal?

+0

+1 : Apreciamos la actualización –

Respuesta

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

Puse las tres consultas una al lado de la otra y ejecuté un plan de ejecución. Esta respuesta tuvo un costo del 5%. – Margaret

+3

+1: Gracias a Margaret por la información –

+0

+1 Eso es muy útil. – gotqn

7

Uso:

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

Puse las tres consultas lado a lado y ejecuté un plan de ejecución. Esta respuesta tuvo un costo del 44%. – Margaret

5

O puede utilizar una mezcla de JBrooks y OMG Ponies respuestas:

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

Puse las tres consultas una al lado de la otra y ejecuté un plan de ejecución. Esta respuesta tuvo un costo del 51%. – Margaret

+0

Okie dokie! Y gracias por los comentarios. Lo agregaré a mi caja de herramientas. :-) –

+2

+1: Estaba esperando a ver cuál era el costo :) –

3

una buena situación para usar CROSS APPLY

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 
Cuestiones relacionadas