2

我正在接收以下SQL腳本中的執行錯誤。MSSQL 2008 R2中的窗口函數問題

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 

錯誤消息

附近有語法錯誤順序'。

誰能告訴我腳本syntext有什麼問題嗎?

回答

5

問題是您需要SQL Server 2012及更高版本。好的,我爲未來的訪問者添加了「以上」,但比較2008 OVER CLAUSE2012 OVER CLAUSE

2008年的版本有此重要提示:

當排名窗函數的情況下使用,<ORDER BY Clause>只能引用由FROM子句中提供的列。 無法指定整數來表示名稱的位置 或選擇列表中列的別名。 <ORDER BY Clause>不能是 與聚合窗口函數一起使用。

2

在SQL Server 2008中,您只能使用OVER clause分區聚合函數,不適用命令:

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

集合窗函數 < OVER_CLAUSE> :: = OVER([PARTITION BY value_expression,... [N])

注意,有沒有<ORDER BY Clause>的集合體。

+0

如果我必須在上面給出的查詢中運行總計借方,我在SQL Server 2008 R2中具有窗口函數的選項。目前我正在使用CLR集成函數來運行總計。如果這個Window函數比基於CLR的函數更好的性能,那麼它會很好。如果有任何博客或鏈接可以顯示這種窗口函數與SQL Server 2008 R2的示例執行,這將是有幫助的。 Nilkanth –

+0

@NilkanthDesai - 可以在SQL中計算運行總計 - 通常可以使用遞歸公用表表達式(CTE)或「三角聯結」(條件是不等式的聯結,如「<」)。在本網站或其他地方搜索SQL中的總計應該找到一些體面的答案。 –