我希望看到这个SO问题中概述的最简洁的方法:Sum values from multiple rows into one row 也就是说,在对一列进行求和时组合多行。
但是如何删除重复项。换句话说,我有这样的数据:
Person Value
--------------
1 10
1 20
2 15
我想将任何重复项(在Person col上)的值加到一行中,并删除Person值上的其他重复项。所以我的输出是:
Person Value
-------------
1 30
2 15
我想在不使用临时表的情况下这样做。我认为我需要使用OVER PARTITION BY
但不确定。只是试图挑战自己,不要以临时表的方式来做。使用SQL Server 2008 R2
简单地说,给我一个简洁的stmt从我的输入到同一个表中的输出。因此,如果我的表名是People
,如果我在此问题的操作之前对其进行了select * from People
,我会得到上面的第一组,然后当我执行select * from People
之后操作,我得到上面的第二组数据。
答案 0 :(得分:2)
不确定为什么不使用Temp表,但是这里有一种方法可以避免它(这可能是一种过度杀伤):
UPDATE MyTable SET VALUE = (SELECT SUM(Value) FROM MyTable MT WHERE MT.Person = MyTable.Person);
WITH DUP_TABLE AS
(SELECT ROW_NUMBER()
OVER (PARTITION BY Person ORDER BY Person) As ROW_NO
FROM MyTable)
DELETE FROM DUP_TABLE WHERE ROW_NO > 1;
首先查询将每个重复的人更新为摘要值。第二个查询删除了重复的人。
答案 1 :(得分:0)
您要求的只是一个简单的SUM()
汇总函数和GROUP BY
SELECT Person, SUM(Value)
FROM myTable
GROUP BY Person
SUM()
本身会将列中的值相加,但是当您添加辅助列并GROUP BY
时,SQL将显示辅助列中的不同值并执行聚合函数那些不同的类别。