SQL Server在本月之前进行透视

时间:2016-12-02 12:15:07

标签: sql sql-server pivot

我正在使用SQL Server 2012,并且下面的内容构成了一个更大的声明的一部分,用于计算名为' This_Year'的字段中每个月的总数。这很好用:

SELECT        
pvt.*, 
Isnull(pvt.jan_CY, 0) + Isnull(pvt.feb_CY, 0) + 
Isnull(pvt.mar_CY, 0) + Isnull(pvt.apr_CY, 0) + 
Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + 
Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0) + 
Isnull(pvt.sep_CY, 0) + Isnull(pvt.oct_CY, 0) + 
Isnull(pvt.nov_CY, 0) + Isnull(pvt.Dec_CY, 0) AS This_Year
FROM
(SELECT        Account AS [GL_Code], AccountDesc AS [GL Desc].......

我的问题是我的任务是修改此项目,以便根据当时的当月数量将当前月份排除在总数之外。

所以目前(12月)我只需要计算11月份的所有内容。在1月,它将包括12月等所有内容。

最好的方法是什么?我是否需要为每个场景执行CASE,即当前月份= 12时仅添加1 + 2 + .... 11等?

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣我就把它解决了:

SELECT        
pvt.*, 
CASE
WHEN MONTH(GETDATE()) = 5 THEN Isnull(pvt.may_CY, 0)
WHEN MONTH(GETDATE()) = 6 THEN Isnull(pvt.may_CY, 0) 
WHEN MONTH(GETDATE()) = 7 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0)
WHEN MONTH(GETDATE()) = 8 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0)
WHEN MONTH(GETDATE()) = 9 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)
WHEN MONTH(GETDATE()) = 10 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)
WHEN MONTH(GETDATE()) = 11 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0)
WHEN MONTH(GETDATE()) = 12 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0) + Isnull(pvt.nov_CY, 0) 
WHEN MONTH(GETDATE()) = 1 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0) + Isnull(pvt.nov_CY, 0) + Isnull(pvt.Dec_CY, 0) 
WHEN MONTH(GETDATE()) = 2 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0) + Isnull(pvt.nov_CY, 0) + Isnull(pvt.Dec_CY, 0) + Isnull(pvt.jan_CY, 0)
WHEN MONTH(GETDATE()) = 3 THEN Isnull(pvt.may_CY, 0) + Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0) + Isnull(pvt.nov_CY, 0) + Isnull(pvt.Dec_CY, 0) + Isnull(pvt.jan_CY, 0) + Isnull(pvt.feb_CY, 0)
WHEN MONTH(GETDATE()) = 4 THEN Isnull(pvt.may_CY, 0)+ Isnull(pvt.jun_CY, 0) + Isnull(pvt.jul_CY, 0) + Isnull(pvt.aug_CY, 0)+Isnull(pvt.sep_CY, 0)+ Isnull(pvt.oct_CY, 0) + Isnull(pvt.nov_CY, 0) + Isnull(pvt.Dec_CY, 0) + Isnull(pvt.jan_CY, 0) + Isnull(pvt.feb_CY, 0) + Isnull(pvt.mar_CY, 0)
end as This_Year 
FROM
(SELECT        Account AS [GL_Code], AccountDesc AS [GL Desc].......