2010-01-05 57 views
74

Tôi đang cố gắng đặt giá trị trong một bảng thành tổng của các giá trị trong một bảng khác. Một cái gì đó dọc theo những dòng:Chức năng tổng hợp trong truy vấn cập nhật SQL?

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

Tất nhiên, vì đây đứng, nó sẽ không làm việc - SET không hỗ trợ SUM và nó không hỗ trợ GROUP BY.

Tôi nên biết điều này, nhưng tâm trí của tôi vẽ một khoảng trống. Tôi đang làm gì sai?

+0

+1 : Đánh giá cao bản cập nhật –

Trả lời

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

Tôi đặt ba truy vấn cạnh nhau và chạy một kế hoạch thực hiện. Câu trả lời này có chi phí là 5%. – Margaret

+3

+1: Cảm ơn Margaret về thông tin –

+0

+1 Điều đó rất hữu ích. – gotqn

7

Sử dụng:

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

Tôi đặt ba truy vấn cạnh nhau và chạy một kế hoạch thực hiện. Câu trả lời này có giá 44%. – Margaret

5

Hoặc bạn có thể sử dụng kết hợp JBrooksOMG Ponies câu trả lời:

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

Tôi đặt ba truy vấn song song và chạy một kế hoạch thực hiện. Câu trả lời này có chi phí là 51%. – Margaret

+0

Okie dokie! Và cảm ơn vì phản hồi. Tôi sẽ thêm nó vào hộp công cụ của mình. :-) –

+2

+1: Đã chờ xem chi phí là gì :) –

3

Một tình huống tốt để sử dụng CHÉO ÁP DỤNG

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 
Các vấn đề liên quan