SQL Server在没有游标的行之间添加数字

时间:2014-06-03 14:54:42

标签: sql sql-server sql-server-2012

我想知道是否有任何类型的功能可以帮助我在行之间添加数字。我不确定如何最好地解释它,但这里是一个初始数据和我正在寻找的结果的例子。我有大量的记录,所以我正在寻找最快的方法,因为我有大约800万条这样的记录。

数据

Mike, Smith, 1/1/2014, 26
Mike, Smith, 2/1/2014, 0
Mike, Smith, 3/1/2014, 0
Mike, Smith, 4/1/2014, -2
Mike, Smith, 5/1/2014, 0
Mike, Smith, 5/1/2014, 3
Joe, Blow, 1/1/2014, 15
Joe, Blow, 2/1/2014, 0
Joe, Blow, 3/1/2014, 2

结果

Mike, Smith, 1/1/2014, 26
Mike, Smith, 2/1/2014, 26
Mike, Smith, 3/1/2014, 26
Mike, Smith, 4/1/2014, 24
Mike, Smith, 5/1/2014, 24
Mike, Smith, 5/1/2014, 27
Joe, Blow, 1/1/2014, 15          <-- note that because it's unique first/last we start over with our adding
Joe, Blow, 2/1/2014, 15
Joe, Blow, 3/1/2014, 17

这个想法是继续根据某个组(名字,姓氏,本例中的日期)和顺序(在这种情况下为dt)添加第一个数字。我有其他名称具有相同的重复日期,但需要重新添加每个唯一名称。

1 个答案:

答案 0 :(得分:4)

您似乎想要的是累积金额。这在SQL Server 2012中很容易获得:

select t.*, sum(val) over (partition by firstname, lastname order by date) as cumsum
from table t;

您可以在早期版本的SQL Server中执行类似的操作,但语法更麻烦。