我在接下来的sql脚本中收到执行错误。
Select TOP 1 Percent a.accode,a.voucherdate,a.credit,a.Debit,
SUM(a.Debit) Over (Order By [a.accode],[a.voucherdate] ) as rdr
from VoucherMain as a
Order By a.accode,a.voucherdate
错误消息
'order'附近的语法不正确。
有人能告诉我脚本syntext有什么问题吗?
答案 0 :(得分:6)
问题是您需要SQL Server 2012及更高版本。好的,我为将来的访问者添加了“及以上”,但将2008 OVER CLAUSE与2012 OVER CLAUSE进行了比较。
2008版本有这个重要的注释:
在排名窗口函数的上下文中使用时,
<ORDER BY Clause>
只能引用FROM子句提供的列。 不能指定整数来表示名称的位置 或选择列表中列的别名。<ORDER BY Clause>
不能 与聚合窗口函数一起使用。
答案 1 :(得分:3)
在SQL Server 2008中,您只能使用OVER
clause到分区聚合函数,而不是应用订单:
排名窗口函数 &LT; OVER_CLAUSE&gt; :: = OVER([PARTITION BY value_expression,... [n]] &LT; ORDER BY_Clause&gt; )
聚合窗口函数 &LT; OVER_CLAUSE&gt; :: = OVER([PARTITION BY value_expression,... [n]])
请注意,聚合没有<ORDER BY Clause>
。