Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据列值对行更新进行分组?_Sql_Tsql - Fatal编程技术网

Sql 如何根据列值对行更新进行分组?

Sql 如何根据列值对行更新进行分组?,sql,tsql,Sql,Tsql,我有一张这样的桌子 +------------------------------+ | Name,Class,Value,Class_Total | +------------------------------+ | John ,A ,10, 0 | | Jake ,A ,22, 0 | | Jill ,B ,34, 0 | +------------------------------+ 我想运行一个更新

我有一张这样的桌子

+------------------------------+
| Name,Class,Value,Class_Total |
+------------------------------+
| John  ,A  ,10,        0      |
| Jake  ,A  ,22,        0      |
| Jill  ,B  ,34,        0      |
+------------------------------+
我想运行一个更新查询,用每个类的总数填充类的总数,即结果是

+------------------------------+
| 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
)
但这会将所有类的总数放入类中,而不仅仅是行所属的类,我需要以某种方式按类对项目进行分组。我知道我能做一件好事

WHERE Class ='A'
在选择,但我想做它自动为许多类。
希望有意义,谢谢。

您可以使用一个简单的子查询:

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

请尝试使用
CTE

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