2013-03-06 6 views
4

Je souhaite incorporer deux calculs de moyenne pour un groupe de colonnes de valeur dans mon instruction select.Calcul de la moyenne T-SQL

voir ce lien pour ma structure de tableau simplifié comprenant le calcul de la sortie désirée: Pastebin

1) moyenne mobile:

Month1 = valeur de la valeur1-colonne pour ce mois, Month2 = si la somme == 0 puis écrire 0, sinon avg (Month1 et Month2) et ainsi de suite.

Donc, pour chaque produit, je veux la moyenne mobile pour chaque mois dans l'année. Je l'ai mis en place dans mon Excel mais je ne peux pas transférer l'expression à sql.

2) moyenne générale:

pour chaque produit, le calcul de la moyenne sur toutes les années et dupliquer la valeur calculée pour toutes les lignes de ce produit.

J'espère que vous pouvez m'aider avec ceci. Il semble que j'ai besoin d'une procédure, mais c'est peut-être juste une simple déclaration.

Répondre

4

SQL Server 2012 prend en charge le analytic functions nécessaire pour le faire:

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