sql - SQL Server - 将当年的月份与上一年的月份进行比较
问题描述
我想将今年(2020 年)的月份与上一年(2019 年)的月份进行比较。我必须以百分比计算增量,但这是我可以自己解决的任务。
我尝试将桌子与自己连接起来。Month_Year
我需要的列是Revenue 1
和Revenue 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
在我的输出中,月份是正确的,但我的收入似乎只是随机数相加。
解决方案
只选择有问题的年份,然后按月份分组并每年有条件地总结:
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 不同:-)。