2013-02-01 145 views
0

我沒有與窗函數很多經驗,我必須用一個我的平均值計算, 這是我的代碼:窗口功能

AVG(b.TotalSilkHrs) OVER(partition BY b.TECHNICIANCODE 
    ORDER BY b.rankID 
    ROWS BETWEEN CURRENT ROW and 3 FOLLOWING) AS MovingAvg 

我估計是在子查詢計算總和的平均值。 它給我的錯誤:

消息102,級別15,狀態1,行24 附近有語法錯誤 '行'。

爲什麼我會收到錯誤?我用我從你的網站得到的代碼

+0

我不認爲SQL Server支持這種類型的分區定義的。如果有的話,你需要SQL Server 2012,在那之前Window函數的實現非常有限。 –

+0

您正在使用哪個版本的SQL Server? –

+0

SQL Server 2012支持[OVER()](http://msdn.microsoft.com/en-us/library/ms189461.aspx)子句。 –

回答

1

你的原始語法僅適用於SQL Server 2012中,舊版本試試這個

;WITH AVGCTE AS 
(
    SELECT *, 
    ROW_NUMBER() OVER(partition BY TECHNICIANCODE ORDER BY rankID) Rn 
    FROM TableA 
) 

SELECT A.*, B.AVG_COL 
FROM AVGCTE A 
CROSS APPLY 
(
    SELECT x.AVG(TotalSilkHrs) AVG_COL 
    FROM AVGCTE x WHERE x.Rn BETWEEN A.rn and a.rn + 2 
    AND A.TECHNICIANCODE = x.TECHNICIANCODE   
) B 
+0

第一條語句不起作用,因爲我必須限制句點第二個代碼不起作用,因爲我的總和僅從5個不同的表中計算當我在這個子選擇語句中排列它們時,它不適用於任何一個。 – user2019324

+0

@ user2019324,發表您的所有表格和樣本數據,在您的問題中,您甚至沒有提到單個表名,並且您希望我們在問題中缺少信息時回答問題?我給你提供了一個示例查詢來回答上面的問題,使用它並更新它以使其與原始查詢一起工作 –