2017-07-18 2 views
0

J'ai colonnes suivantes de janvier à décembre:Comment faire SUM sur des colonnes mois l'année précédente

Year - Jan - Feb - Mar - (etc.) - Dec 
---- --- --- ---   --- 
2015 25 32 102   12 
2016 30 40 50    60 

comment faire efficacement SUM à l'année dernière? Disons de GETDATE(), Si aujourd'hui est 18.07.2017, je veux SUM à partir du 18.07.2016 (de juillet 2016 à juillet 2017).

Je n'ai aucune idée de comment le faire efficacement.

+0

Mais vous n'avez pas niveau de jour des données granulaires ici, d'où vous pouvez trouver la somme de niveau de mois –

Répondre

1

Unpivot les données, puis faire le calcul:

select sum(val) 
from t cross apply 
    (values (t.year, t.Jan, 1), 
      (t.year, t.Feb, 2), 
      . . . 
    ) v(yyyy, val, mon) 
where yyyy * 100 + mon >= (year(getdate()) - 1) * 100 + month(getdate()); 
+0

fonctionne parfaitement –

+0

Est-il possible de le faire sans croix appliquer? –

+0

@ JúliusMarko. . . Probablement, mais cela entraîne la requête la plus simple. –