我正在使用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等?
答案 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].......