Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 当我在两个日期之间对每个月的值求和时,我得到了错误的值_Sql Server_Date - Fatal编程技术网

Sql server 当我在两个日期之间对每个月的值求和时,我得到了错误的值

Sql server 当我在两个日期之间对每个月的值求和时,我得到了错误的值,sql-server,date,Sql Server,Date,我真的很难回答一个问题。我想要2014年8月至2015年7月期间每个月的总和。如果我在where子句中指定了两个日期之间的日期,则将所有月份相加 我的问题是: DECLARE @CurrentYear int = DATEpart(year,getdate()) DECLARE @PreviousYear int = DATEpart(year,getdate()) -1 SELECT SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'0

我真的很难回答一个问题。我想要2014年8月至2015年7月期间每个月的总和。如果我在where子句中指定了两个日期之间的日期,则将所有月份相加

我的问题是:

DECLARE @CurrentYear int = DATEpart(year,getdate()) 
DECLARE @PreviousYear int = DATEpart(year,getdate()) -1
SELECT  
SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'08') THEN a.balance ELSE 0 END) AS BalanceAug ,
SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'09') THEN a.balance ELSE 0 END) AS BalanceSep ,
SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'10') THEN a.balance ELSE 0 END) AS BalanceOct ,
SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'11') THEN a.balance ELSE 0 END) AS BalanceNov ,
SUM(CASE WHEN a.fin_period = concat(@PreviousYear,'12') THEN a.balance ELSE 0 END) AS BalanceDec ,
...etc.
FROM subaccount_history a with (nolock) 
WHERE fin_period between concat(@PreviousYear,'08') and concat(@CurrentYear,'12')

问题在于between子句,我尝试了groupby,但也不起作用。它对指定的两个日期之间的所有数据进行求和。

几乎所有实际查询都使用了
@PreviousYear
,但是,突然在
中的
中,
@CurrentYear
再次出现。这就是问题所在吗?在以下日期中,它使用@currentyear,因为它从去年8月运行到今年7月。我并没有加上那个几个月来节省空间,他们在哪里等是。哪一个总数是不正确的?一个月显示较大的余额,或者您希望保留明细记录,并在其旁边保留所有余额?你能举一个当前结果与预期结果的对比例子吗?谢谢(哦,你能提供你的sql server版本吗?Pivot功能可以让你的生活更轻松,和/或窗口功能,取决于你的需要)sql server 2012。结果集很好,但当我测试数据时,我发现它不正确。例如:如果测试需要一个月的时间,则从子帐户历史中选择sum((如果a.fin_period=201412,则a.balance ELSE 0 END)作为BalanceDec,其中fin_period=201412,结果是8296011.45,但当我使用x和y之间的where fin_period运行时,我得到的结果是:167104326.47,这不应该是“concat(@CurrentYear,'12')”“concat(@CurrentYear,'07')”?