注册 登录
编程论坛 SQL Server论坛

计算增长率的问题

shjt 发布于 2011-03-05 20:29, 1126 次点击
公司报表要求计算增长率,请教高手编写SQL语句

表tt

日期         经济指标     增长率   
2010-1-1     1000         0
2010-1-15    2000         *         要求计算数值:(2000-1000)/1000
2010-1-30    3000         *         要求计算数值:(3000-2000)/2000
2010-2-28    5000         *         要求计算数值:(5000-3000)/3000
2010-3-31    5000         *         要求计算数值:(5000-5000)/5000
2010-4-15    4000         *        
........

说明:计算“增长率”的公式为:(下行数值 -上行数值)/上行数值
5 回复
#2
shjt2011-03-06 20:58
怎么无人知道呀!!!!真是——————寂寞高手一时惧无踪!!!
#3
terryllb2011-03-06 23:13
update tt t set 增长率=(经济指标 in (select 经济指标 from tt having count(经济指标)=count(t.经济指标)+1 order by 经济指标)-t.经济指标)/1000
#4
shjt2011-03-07 20:31
感谢高手出来解答,可是出错了。

create table tt (日期 smalldatetime, 经济指标 int, 增长率 decimal null )
insert into tt values ('2010-1-1',1000,0)
insert into tt values ('2010-1-15', 2000, null)
insert into tt values ('2010-1-30', 3000, null)
insert into tt values ('2010-2-28', 5000, null)
insert into tt values ('2010-3-31', 5000, null)
insert into tt values ('2010-4-15', 4000, null)
go
select * from tt
go

update tt t set 增长率=(经济指标 in (select 经济指标 from tt having count(经济指标)=count(t.经济指标)+1 order by 经济指标)-t.经济指标)/1000

运行结果:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 't' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'order' 附近有语法错误。
#5
png2011-03-11 00:53
回复 楼主 shjt
请人帮忙态度要端正啊.
#6
autobot2011-03-23 16:16
--建表加入数据
create table tt (日期 smalldatetime, 经济指标 int, 增长率 decimal null )
insert into tt values ('2010-1-1',1000,0)
insert into tt values ('2010-1-15', 2000, null)
insert into tt values ('2010-1-30', 3000, null)
insert into tt values ('2010-2-28', 5000, null)
insert into tt values ('2010-3-31', 5000, null)
insert into tt values ('2010-4-15', 4000, null)

--直接执行这个脚本就可以,他会直接显示出每期的增长率,负值为负增长
SELECT  t2.日期,t2.经济指标,CAST( (t2.经济指标 - t1.经济指标) AS DECIMAL(6,2))/t1.经济指标 AS 增长率
FROM (SELECT tt.日期,tt.经济指标,ROW_NUMBER() OVER(ORDER BY tt.日期)+1 AS num  FROM tt) AS t1
,(SELECT tt.日期,tt.经济指标,ROW_NUMBER() OVER(ORDER BY tt.日期) AS num FROM tt) AS t2
WHERE t1.num = t2.num
1