作者MagicPaul (达人)
看板Database
标题Re: [SQL ] 计算成长率问题
时间Thu Dec 19 10:30:49 2013
※ 引述《lisyu (游小虾)》之铭言:
: ※ 引述《hfnadkv (冲冲冲)》之铭言:
: : 目前遇到一个问题,就是资料栏位的方式是长成这样
: : 因为年份会一直增加
: : 如何利用SQL不写死,去自动算出成长率呢?
: : 年 金额
: : 2007 3000
: : 2008 4000
: : 2009 5000
: : 算各年的成长率
: : 年 金额 成长率
: : 2007 3000 0
: : 2008 4000 0.33
: : 2009 5000 0.25
: select year,amt,(amt-ISNULL(preTable.amt,amt))/ISNULL(preTable.amt,amt)
: from AmtTable a
: LEFT JOIN AmtTable as preTable
: on a.year-1 = preTable.Year
: 因为手边电脑没SQL
: 所以没办法实测
: 不过应该会OK...XD
: 如果有误,等明天开笔电再来试
想请问这个方法可以用在多表身的计算上吗?
例如
单号 月份 专柜 销售金额
==========================
001 1 A 5000
1 B 4000
--------------------------
002 2 A 4500
2 B 6000
--------------------------
003 3 A 5500
3 B 3500
3 C 2000←新增
--------------------------
小弟用的DB是MS SQL2008
自已写出来了,分享给各位乡民
select a.bid,a.periods,a.store,b.amounts,b.sortno into #temp
from 表头table a inner join 表身table b on a.bid = b.bid
order by a.store ,a.periods
select c.sortno,c.store,c.periods,c.amounts,preTable.amounts,
ROUND(cast(c.amounts-ISNULL(preTable .amounts,c.amounts)AS
FLOAT)/ISNULL(preTable .amounts,c.amounts),2)*100
from #temp c LEFT JOIN #temp as preTable on c.periods -1 = preTable .periods
WHERE c.store = preTable.store and c.sortno = preTable.sortno
drop table #temp
如果有大大觉得那里可能会产生BUG请告诉我( ̄▽ ̄#)﹏﹏
对程式有不懂的部份欢迎提问
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.125.23.111
※ 编辑: MagicPaul 来自: 36.233.12.197 (01/01 23:53)