2014-07-23 71 views
0

我有這樣如何根據列值對行更新進行分組?

+------------------------------+ 
| Name,Class,Value,Class_Total | 
+------------------------------+ 
| John ,A ,10,  0  | 
| Jake ,A ,22,  0  | 
| Jill ,B ,34,  0  | 
+------------------------------+ 

一個表,我想運行一個UPDATE查詢與總爲每個類即結果填充Class_Total將

+------------------------------+ 
| Name,Class,Value,Class_Total | 
+------------------------------+ 
| John ,A ,10,  32  | 
| Jake ,A ,22,  32  | 
| Jill ,B ,34,  34  | 
+------------------------------+ 

目前我有這

UPDATE dbo.Contrived 
SET Class_Total = (SELECT SUM(Value) 
FROM dbo.Contrived 
) 

但這把總數在Class_Total所有類不只是該行所屬的類,我需要以某種組按課程分項目。我知道我可以做一個

WHERE Class ='A' 

在選擇,但我想自動做很多類。 希望有道理,謝謝。

回答

2

你可以使用一個簡單的子查詢:

UPDATE c 
SET c.Class_Total = (SELECT SUM(c2.Value) 
        FROM dbo.Contrived c2 
        WHERE c2.Class = c.Class) 
FROM dbo.Contrived c 

Demo-Fiddle

0

請嘗試使用CTE

;with T as(
    select *, SUM(Value) over(partition by Class) sm 
    From dbo.Contrived 
) update T set Class_Total=sm 
相關問題