oracle la环比计算,Oracle计算环比示范

当前位置:我的异常网» 数据库 » Oracle计算环比示范

Oracle计算环比示范

www.myexceptions.net  网友分享于:2013-07-05  浏览:62次

Oracle计算环比示例

环比就是今年第n月与第n-1月或第n+1月比;同比就是今年第n月与去年第n月比。

建测试表,假设是个销售数量表:

create table t (dt date,cnt number);

随便插入些测试数据,最后表的内容如下:

DT                CNT

---------- ----------

2012-02-09         15

2012-02-21          2

2012-03-23          1

2012-03-23          5

2012-04-23          2

2012-05-12         20

2012-07-01         20

2012-07-21         20

显示环比,如果某个月没有销售,就有点儿麻烦。

先想个办法,显示本年度的1至12月,有个很有技巧的技术来实现:

SQL> set pagesize 20

SQL> with m as (select '2012-'||lpad(rownum,2,'0') v from dual connect by level<=12) select * from m;

V

---------

2012-01

2012-02

2012-03

2012-04

2012-05

2012-06

2012-07

2012-08

2012-09

2012-10

2012-11

2012-12

接下来就容易了,两个表外连,使用lag统计函数就可以了。

with m as (select '2012-'||lpad(rownum,2,'0') v from dual connect by level<=12)

select m.v "月份",nvl(sum(t.cnt),0) "销售数量",

lag(nvl(sum(t.cnt),0),1) over (order by m.v) "上月销量数量",

nvl(sum(t.cnt),0)-lag(nvl(sum(t.cnt),0),1) over (order by m.v) "环比增加量",

round((case when nvl(sum(t.cnt),0)=0 then null else (nvl(sum(t.cnt),0)-lag(nvl(sum(t.cnt),0),1) over (order by m.v))/nvl(sum(t.cnt),0) end)*100,1) "环比增加比例(%)"

from m left outer join t

on m.v=to_char(t.dt,'yyyy-mm') group  by m.v order by 1

月份        销售数量 上月销量数量 环比增加量 环比增加比例(%)

--------- ---------- ------------ ---------- ---------------

2012-01            0

2012-02           17            0         17             100

2012-03            6           17        -11          -183.3

2012-04            2            6         -4            -200

2012-05           20            2         18              90

2012-06            0           20        -20

2012-07           40            0         40             100

2012-08            0           40        -40

2012-09            0            0          0

2012-10            0            0          0

2012-11            0            0          0

2012-12            0            0          0

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值