2013-03-06 210 views
4

我想在选择语句中为一堆值列合并两个平均值计算。T-SQL平均值计算

看到这个链接指向我的简化的表结构,包括所期望的输出计算:)移动Pastebin

1平均值:数值1列的

MONTH1 =值该月份,MONTH2 =如果总和== 0然后写0,否则avg(Month1和Month2)等等。

因此,对于每个产品,我想要在一年内每个月的移动平均值。 我有这个设置在我的Excel中,但我不能将表达式传递到SQL。

2)整体平均:

每个产品,计算平均在所有年份和计算出的值复制到该产品的所有行。

我希望你能帮助我解决这个问题。它看起来像我需要一个程序,但也许它只是一个简单的声明。

回答

4

SQL-Server 2012的支持要做到这一点需要analytic functions

SELECT Product, 
     Month, 
     Year, 
     Value, 
     AVG_YTD = AVG(Value) OVER(PARTITION BY Year ORDER BY Month), 
     AVG_Year = AVG(Value) OVER(PARTITION BY Product, Year), 
     AVG_Overall = AVG(Value) OVER(PARTITION BY Product) 
FROM T; 

Simplified Example on SQL Fiddle