2017-07-18 38 views
0

我有以下从1至12月列:怎么办了一个月列SUM在过去的一年里

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

如何有效地做求和过去的一年? 假设从GETDATE()开始,如果今天是18.07.2017,我希望从2016年7月18日起(2016年7月至2017年7月)收到SUM。

我不知道如何有效地做到这一点。

+0

但是你没有天级粒度数据在这里,所以你能找到个月的水平和 –

回答

1

逆透视数据,然后做计算:

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

完美的作品 –

+0

有没有办法做到这一点不交应用? –

+0

@JúliusMarko。 。 。可能,但这会导致最简单的查询。 –

相关问题