SQL Server 2012:按顺序求和得出错误的“ order”附近语法错误

cur*_*ous 3 sql sql-server sum sql-server-2012

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
Run Code Online (Sandbox Code Playgroud)

引发错误:

'order'附近的语法不正确。

https://msdn.microsoft.com/zh-CN/library/ms187810.aspx

SQL Server 2012中是否不支持按订单总和?如果我删除order by并仅使用分区有效,但对于“ C”,所有行均得到60。我想总跑。

更多信息:

  • Microsoft SQL Server管理Studio 11.0.2100.60
  • Microsoft Analysis Services客户端工具11.0.2100.60
  • Microsoft数据访问组件(MDAC)6.1.7601.17514

数据库选项->兼容性级别仅显示2000、2005和2008,并选择2008。

尝试跑步

ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = 110
Run Code Online (Sandbox Code Playgroud)

引发错误:

数据库兼容性级别的有效值为80、90或100。

Gor*_*off 7

SQL Server 2012+之前不支持累积和。大概您正在使用SQL Server 2005或2008,或者您的兼容性设置为105或更小(请参阅此处)。

在这些版本中,您可以使用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;
Run Code Online (Sandbox Code Playgroud)