2010-01-05 14 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 :讚賞更新 – 2010-01-06 00:37:12

回答

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 2010-01-06 00:24:04

+3

+1:感謝瑪格麗特的信息 – 2010-01-06 00:34:58

+0

+1這非常有用。 – gotqn 2013-06-13 08:14:08

7

用途:

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

我並排放置了三個查詢並執行了一個執行計劃。這個答案有44%的成本。 – Margaret 2010-01-06 00:24:35

5

或者你可以使用的JBrooksOMG Ponies答案的混合:

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

我把三個查詢並列並執行一個執行計劃。這個答案有51%的成本。 – Margaret 2010-01-06 00:36:21

+0

Okie dokie!並感謝您的反饋。我將它添加到我的工具箱中。 :-) – 2010-01-06 01:22:42

+2

+1:正在等着看成本是多少:) – 2010-01-06 01:24:27

3

一個很好的情況下,使用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