2010-01-05 14 views
74

Ich versuche, den Wert in einer Tabelle auf die Summe der Werte in einer anderen Tabelle festzulegen. Etwas in diese Richtung:Aggregatfunktion in einer SQL-Aktualisierungsabfrage?

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

Natürlich, wie dies steht, wird es nicht funktionieren - SET nicht SUM nicht unterstützt und es nicht GROUP BY unterstützt.

Ich sollte das wissen, aber meine Gedanken sind leer. Was mache ich falsch?

+0

+1 : Schätzte das Update –

Antwort

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

Ich legte die drei Abfragen nebeneinander und führte einen Ausführungsplan aus. Diese Antwort hatte einen Kostenaufwand von 5%. – Margaret

+3

+1: Danke Margaret für die Info –

+0

+1 Das ist sehr nützlich. – gotqn

7

Verwendung:

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

Ich legte die drei Abfragen nebeneinander und führte einen Ausführungsplan aus. Diese Antwort hatte einen Preis von 44%. – Margaret

5

Oder Sie eine Mischung aus JBrooks und OMG Ponies Antworten verwenden:

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

Ich habe die drei Abfragen nebeneinander gestellt und einen Ausführungsplan erstellt. Diese Antwort hatte einen Kostenaufwand von 51%. – Margaret

+0

Okie dokie! Und danke für das Feedback. Ich füge es meiner Toolbox hinzu. :-) –

+2

+1: Warteten um zu sehen, was die Kosten waren :) –

3

eine gute Situation zu verwenden 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 
Verwandte Themen