declare @t table (cid int, amount int, cname varchar)
insert into @t
values (6, 20, 'C'), (7, 30, 'C'), (8, 10, 'C'), (9, 10, 'D')
select
sum(amount) over (partition by cname order by cid),
*
from @t
引发错误:
'order'附近的语法不正确。
https://msdn.microsoft.com/en-us/library/ms187810.aspx
在SQL Server 2012中是否支持按顺序排列?如果我删除顺序并且只使用分区,那么它可以工作,但是对于'C',所有行都会得到60。我希望得到总计。
更多信息:
数据库选项 - >兼容级别仅显示2000,2005和2008,并选择2008。
尝试运行
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = 110
引发错误:
数据库兼容级别的有效值为80,90或100。
答案 0 :(得分:4)
SQL Server 2012+之前不支持累积总和。据推测,您使用的是SQL Server 2005或2008,或者您的兼容性设置设置为105或更低(请参阅here)。
在这些版本中,您可以使用outer apply
:
select t.*, s.amount
from @t t outer apply
(select sum(t2.amount) as amount
from @t t2
where t2.cname = t.cname and t2.cid <= t.cid
) s;