SQL根据条件查询某一个月与上一个月的对比

SQL根据条件查询某一个月与上一个月的对比,第1张

为了方便转换,先写个转换自定义函数:(将年,月转换成日期)

create function Todate(@year smallint,@month tinyint)

returns datetime

as

begin

declare @date datetime

select @date=cast(

cast(@year as varchar(4))+‘-'+cast(@month as varchar(2)+'-1'

as datetime)

return(@date)

end

查询代码:

select

a.name ,a. year,a. month a.money,

case when a.money-b.money >0 then a.money-b.money else -1*(a.money-b.money ) end

as 下月对比

case when a.money-b.money >0 then '减少' else '增加' end as 得到下月结果

case when a.money-c.money >0 then a.money-b.money else -1*(a.money-c.money ) end

as 上月对比

case when a.money-c.money >0 then '增加' else '减少' end as 得到上月结果

from 工资表 a left join

(select name,dateadd(mm,-1, dbo.Todate(year,month)) as 下月,money from 工资表)b

on a.name=b.name and a.year=year(b.下月) and a.month=b.month(b.下月)

left join

(select name,dateadd(mm,1, dbo.Todate(year,month)) as 上月,money from 工资表)c

on a.name=b.name and a.year=year(c.上月) and a.month=b.month(c.上月)

怎么改题目了?搞的我还把开始的要求给算出来了,如下:

select

a.月份,

a.本月收入总额,

case when b.本月收入总额=0 or b.本月收入总额 IS null then null else

(a.本月收入总额-b.本月收入总额)/b.本月收入总额*100 end 收入增长百分比,

a.本月支出总额,

case when b.本月支出总额=0 or b.本月支出总额 IS null then null else

(a.本月支出总额-b.本月支出总额)/b.本月支出总额*100 end 支出增长百分比,

a.本月余额,

case when b.本月余额<=0 or b.本月余额 IS null then null else

(a.本月余额-b.本月余额)/b.本月余额*100 end 余额增长百分比

from

(

select

MONTH(日期) 月份,

isnull(SUM(收入金额),0) 本月收入总额,

isnull(SUM(支出金额),0) 本月支出总额,

isnull(SUM(收入金额),0)-isnull(SUM(支出金额),0) 本月余额

from 收支表

group by MONTH(日期)

) a

left join

(

select

MONTH(日期) 月份,

isnull(SUM(收入金额),0) 本月收入总额,

isnull(SUM(支出金额),0) 本月支出总额,

isnull(SUM(收入金额),0)-isnull(SUM(支出金额),0) 本月余额

from 收支表

group by MONTH(日期)

) b

on a.月份=b.月份+1

order by a.月份 desc

搞到最后才发现你是ACCESS数据库,晕死,那以上SQL Server 代码可能有些地方要修改

比如:case when then else end语句,不知ACCESS是否支持

left join可能要改成left outer join

isnull()函数,不知access是否支持

month()函数,不知access是否支持

用ACCESS完成这么复杂的运算,的确困难.

补充,用case主要是用来排除0和空值,比如,你6月份的收入为0,7月份的收入3500,那么收入增长百分比就是3500/0,结果是无穷大,你在ACCESS中怎么排除这种情况?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10829828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存