sql语句比较两个月的数据?

收支表
------------------
日期 收入金额 支出金额
2009-8-20 3000
2009-8-26 1000
2009-7-10 2000
2009-7-11 1500
2009-6-22 500
可以用一条或多条sql语句 求的 上个月与这个月比较结果 算出这个月的收入增长百分之多少 支出减少百分之多少 余额增加百分之多
请直接给出语句。并能得出结果。
2楼只是算出了,每月的总收入和总支出。并没有把最近的两个月进行比较。

这样吧 再简单一些 能统计出 倒数第二个月 也就是最近一个月的上一个月 的总收入和总支出 就可以。
补充一下 access 数据库 且请用我提供的字段名。

access 不能用case 哦

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

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中怎么排除这种情况?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-30
select iif(isnull(sum(收入金额)),0,sum(收入金额)) as 收入金额,iif(isnull(sum(支出金额)),0,sum(支出金额)) as 支出金额,iif(isnull(sum(收入金额)),0,sum(收入金额))-iif(isnull(sum(支出金额)),0,sum(支出金额)) as 余额 from 收支表 where year(日期)=2009 and month(日期)=(select max(month(日期))-1 from 收支表)

以上,希望对你有所帮助!本回答被提问者采纳
第2个回答  2009-08-30
补充回答:
这样的确简单很多
给你sql
select sum(income) as incomes,sum(payment) as payments, concat(year(createtime),'-',month(createtime)) as month from test group by month order by month desc limit 2

我这里面的函数是MYSQL里面的,如果是SQLSERVER,你自己需要换下
第3个回答  2009-08-30
本年内的查询,只算出每个月的收入和支出总金额,至于你需要的自己可以算下!
select sum(收入金额) as 总收入金额,sum(支出金额 ) as 总支出金额,month(日期) from 收支表 group by month(日期)
第4个回答  2009-08-30
--创建表
create table test( daytime datetime ,earn int,buy int )
--插入表内容
insert into test values ('2009-8-20', 3000, 200)
insert into test values ('2009-8-26', 500,1000)
insert into test values ('2009-7-10', 2000,400)
insert into test values ('2009-7-11', 1500,100)
insert into test values ('2009-6-22', 200,500)

select * from test

--结果 六月 和 七月对比
select a.六月收入,
b.七月收入,
( b.七月收入-a.六月收入/a.六月收入) 收入增长,
a.六月支出,
b.七月支出,
(b.七月支出-a.六月支出)/a.六月支出 支出增长

from (
select sum(earn) 七月收入,
sum(buy) 七月支出
from test
where convert(varchar(6),daytime,112)=200907) b,
(
select sum(test.earn) 六月收入,
sum(test.buy) 六月支出
from test
where convert(varchar(6),test.daytime,112)=200906
) a