3

我在以下 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' 附近的语法不正确

谁能告诉我我的语法有什么问题?

4

2 回答 2

6

问题是您需要 SQL Server 2012 及更高版本。好的,我为未来的访问者添加了“及以上”,但将2008 OVER CLAUSE2012 OVER CLAUSE进行比较。

2008 版有以下重要说明:

在排名窗口函数的上下文中使用时,<ORDER BY Clause>只能引用由 FROM 子句提供的列。不能指定整数来表示选择列表中列的名称或别名的位置。<ORDER BY Clause>不能与聚合窗口函数一起使用。

于 2012-10-02T07:35:19.477 回答
3

在 SQL Server 2008 中,您只能使用OVER子句对聚合函数进行分区,而不能应用顺序:

排名窗口函数 < OVER_CLAUSE > :: = OVER ([ PARTITION BY value_expression , ... [ n ] ] < ORDER BY_Clause> )

聚合窗口函数 <OVER_CLAUSE > :: = OVER ([ PARTITION BY value_expression , ... [n] ])

请注意,<ORDER BY Clause>聚合没有。

于 2012-10-02T07:35:53.843 回答