2013-02-01 131 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,发表您的所有表格和样本数据,在您的问题中,您甚至没有提到单个表名,并且您希望我们在问题中缺少信息时回答问题?我给你提供了一个示例查询来回答上面的问题,使用它并更新它以使其与原始查询一起工作 –