MSSQL 2008 R2中的窗口函数问题

时间:2012-10-02 07:31:31

标签: sql-server sql-server-2008 sql-server-2008-r2 over-clause

我在接下来的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有什么问题吗?

2 个答案:

答案 0 :(得分:6)

问题是您需要SQL Server 2012及更高版本。好的,我为将来的访问者添加了“及以上”,但将2008 OVER CLAUSE2012 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>