Sql server 以交换方式添加上一行值
我陷入了这个疑问。表T1类似于: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
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;