2016-12-02 46 views
0

我正在使用SQL Server 2012,并且具有下面的内容,它构成了一个更大的语句的一部分,用于计算名为“This_Year”的字段中的每个月的总数。这工作得很好:SQL Server数据透视表本月之前

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月份之前的所有事情。在一月份,这将是12月份之前的所有事情,以此类推。

会是怎样解决这个的最佳方式?我是否需要为每个场景执行CASE,即当前月份= 12时是否只添加1 + 2 + ... 11等等?

回答

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].......