当前位置:  数据库>oracle

Oracle计算环比示例

    来源: 互联网  发布时间:2017-04-24

    本文导语:   环比就是今年第n月与第n-1月或第n+1月比;同比就是今年第n月与去年第n月比。   建测试表,假设是个销售数量表: create table t (dt date,cnt number);   随便插入些测试数据,最后表的内容如下: DT                CNT -...

  环比就是今年第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 技术文章 iis7站长之家 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



















































更多Oracle相关信息见 专题页面


    
 
 

您可能感兴趣的文章:

  • oracle while的用法示例分享
  • Oracle 使用Java Source 简单示例
  • ORACLE 毫秒与日期的相互转换示例
  • java使用jdbc链接Oracle示例类分享
  • Oracle数据库安装配置示例
  • java操作oracle数据库示例
  • Oracle数据库安装配置流程示例详细解析
  • oracle表空间中空表统计方法示例介绍
  • oracle创建删除用户示例分享(oracle删除用户命令及授权)
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • Oracle层次查询和with函数的使用示例
  • php连接oracle数据库的示例代码
  • ORACLE实现字段自增示例说明
  • SqlServer实现类似Oracle的before触发器示例
  • oracle截取字符(substr)检索字符位置(instr)示例介绍
  • Oracle外键不加索引引起死锁示例
  • Oracle定义DES加密解密及MD5加密函数示例
  • Oracle数据库密码重置、导入导出库命令示例应用
  • 随机获取oracle数据库中的任意一行数据(rownum)示例介绍
  • oracle comment命令用法示例分享
  • 计算机名称修改后Oracle不能正常启动问题分析及解决
  • 在Oracle9i中Oracle DATA计算时间差
  • Oracle发布“云计算”软件欲与微软对阵
  • 修改计算机名或IP后Oracle10g服务无法启动的解决方法
  • Oracle10g中的current_scn是怎样计算的
  • Oracle表记录字节长长度的两种计算方式
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,