I am receving execution error in following sql script.
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
Error Message
Incorrect syntax near 'order'.
Can anyone tell me what's wrong with the script syntext?
The problem is that you need SQL Server 2012 and above. Okay, I added the "and above" for future visitors, but compare 2008 OVER CLAUSE with 2012 OVER CLAUSE.
The 2008 version has this important note:
When used in the context of a ranking window function,
<ORDER BY Clause>
can only refer to columns made available by the FROM clause. An integer cannot be specified to represent the position of the name or alias of a column in the select list.<ORDER BY Clause>
cannot be used with aggregate window functions.
In SQL Server 2008, you can only use the OVER
clause to partition aggregate functions, not apply an order:
Ranking Window Functions < OVER_CLAUSE > :: = OVER ( [ PARTITION BY value_expression , ... [ n ] ] < ORDER BY_Clause> )
Aggregate Window Functions < OVER_CLAUSE > :: = OVER ( [ PARTITION BY value_expression , ... [ n ] ] )
Note that there's no <ORDER BY Clause>
for the aggregates.
来源:https://stackoverflow.com/questions/12686140/issue-with-window-function-in-mssql-2008-r2