首页 > 解决方案 > SQL Server - 将当年的月份与上一年的月份进行比较

问题描述

我想将今年(2020 年)的月份与上一年(2019 年)的月份进行比较。我必须以百分比计算增量,但这是我可以自己解决的任务。

我尝试将桌子与自己连接起来。Month_Year我需要的列是Revenue 1Revenue 2

我的问题是收入不正确。

到目前为止,这是我的查询:

select 
    a.Month_Year 'Month_Year1'
    ,b.Month_Year 'Month_Year2'
    ,sum(a.[Revenue1]) 'Revenue1'
    ,sum(a.[Revenue2]) 'Revenue2'
    ,sum(b.[Revenue1_last_year]) 'Revenue1_last_year'
    ,sum(b.[Revenue2_last_year]) 'Revenue2_last_year'
from 
    #a
join
    #b on a.Month = b.Month and a.Year= b.Year -1
group by
    a.Month_Year, b.Month_Year
order by
    [Month_Year1] asc, [Month_Year2] asc

在我的输出中,月份是正确的,但我的收入似乎只是随机数相加。

标签: sqlsql-server

解决方案


只选择有问题的年份,然后按月份分组并每年有条件地总结:

select 
  month,
  sum(case when year = year(getdate()) then revenue1 end) as r1_this_year,
  sum(case when year = year(getdate()) then revenue2 end) as r2_this_year,
  sum(case when year < year(getdate()) then revenue1 end) as r1_last_year,
  sum(case when year < year(getdate()) then revenue2 end) as r2_last_year
from mytable
where year in (year(getdate()), year(getdate()) - 1)
group by month
order by month;

如果您只希望在当前月份(即现在显示一月到三月,而不是四月到十二月),添加and month <= month(getdate())到 where 子句。

至于您自己的查询:您将每个 #a 行与月份和年份匹配的每个 #b 行连接起来。因此,假设 2019 年 1 月的 10 #a 行和 2020 年 1 月的 5 #b 行,您会产生 10 x 5 = 50 行。然后你聚合和总结,得到实际值的倍数(因为 1+2 与 1+1+1+2+2+2 不同:-)。


推荐阅读