2013-03-06 325 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