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