SQL Server 2012:按顺序排列错误'order'附近的语法不正确

时间:2016-06-28 01:54:54

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

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。我希望得到总计。

更多信息:

  • Microsoft SQL Server Management 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

引发错误:

  

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

1 个答案:

答案 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;