Sql server 以交换方式添加上一行值

Sql server 以交换方式添加上一行值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我陷入了这个疑问。表T1类似于: Name ID A 1 A -1 B 2 C 3 C 4 E -1 我需要像这样的输出: Name ID Output A 1 1 A -1 0 B 2 2 C 3 5 C 4 9 E -1 8 我所尝试的: SELECT t.NAME, cs.[Count(ID)] FROM T1 t C

我陷入了这个疑问。表T1类似于:

Name ID
A    1 
A   -1
B    2
C    3
C    4
E   -1
我需要像这样的输出:

Name ID   Output
A    1      1
A   -1      0
B    2      2 
C    3      5
C    4      9
E   -1      8
我所尝试的:

SELECT t.NAME,
        cs.[Count(ID)]

FROM   T1 t
        CROSS apply (SELECT Sum([ID]) [Count(ID)]

                    FROM   T1  t1
                    WHERE  t1.ID <= t.ID ) cs 
我没有得到正确的输出,因为它是按Id而不是名称排序的,或者可能是任何其他问题。

您可以使用窗口功能:

sum(id) over (order by name, case when id < 0 then 1 else 0 end, id)

感谢Zhorov建议进行编辑。在发布之前尝试搜索-对于所有版本的sql Server,运行总计已经讨论了很多次。我在这里有一个疑问。。我从未使用过函数求和。在SQLServer2008版本中它能工作吗@yogesh SharmaSELECT t.NAME,cs。[CountID]来自T1 t交叉应用选择Sum[ID]而不是来自T1 T1的order by NAME[CountID],其中T1.ID感谢@yogesh现在使用应用函数工作。我认为2008年版的SQL不支持这个总和,因为它抛出了错误“order”附近的语法不正确
select t1.*, t11.Output
from t1 t1 cross apply
     (select sum(t11.id) as Output
      from t1 t11
      where t11.? <= t.? -- Use ordering column instead.
     ) t11;