`

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
2
0
分享到:
评论
1 楼 anduo1989 2012-08-10  
很不错,经验啊

相关推荐

    oracle 数据库所有示例

    oracle 数据库所有示例 --有去除功能的 是通过交集做的计算 select sname,sal,sage,sdeptno from student where sdeptno in(20,10) union select sname,sal,sage,sdeptno from student where sdeptno=20 ; --没有...

    oracle 存储过程示例

    oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例

    oracle sql 学习示例

    总之,这个“Oracle SQL 学习示例”压缩包提供了全面的实践案例,帮助你深入理解和掌握Oracle SQL的各种特性。通过逐一分析和运行这些示例,你不仅可以熟悉SQL语法,还能提升解决实际问题的能力。记住,实践是学习的...

    ORACLE SQL使用示例

    ORACLE SQL使用示例 二.创建索引 三.创建约束 四.创建视图 五. 创建序列 六. 创建同义词 七.SQL DML数据操纵语句 八,SQL内部函数 九. PLSQL 结构化程序

    oracle求同比,环比函数(LAG与LEAD)的详解

    Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth( employeeNo varchar2(20)...

    oracle TNS 配置示例(tnsnames)

    在这个配置示例中,我们将深入探讨如何配置`tnsnames.ora`文件,这是Oracle TNS的主要配置文件。 首先,打开`tnsnames.ora`文件,通常它位于Oracle客户端的网络配置目录下,例如在Windows系统中可能是`%ORACLE_HOME...

    ORACLE 游标使用示例

    下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个...

    oracle存储过程示例

    这是一个简单的oracle代码,可进行参考

    oracle示例数据库OT,oracle示例数据库 hr,SQL源码.zip.zip

    "Oracle示例数据库OT"和"oracle示例数据库hr"是Oracle公司为了帮助用户熟悉其数据库系统而提供的两个典型示例数据库。这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的...

    oracle12c 数据库示例 hr.sh.bi.pm.xi等

    sample schemas创建与安装示例库脚本, Oracle 12CR2中在创建数据库时不能安装sample schemas。创建sample schemas只需执行db-sample-schemas-12.2.0.1目录下的mksample.sql脚本,mksample EXAMPLE TEMP $ORACLE_...

    JSP Oracle 网上商店 示例

    **JSP Oracle 网上商店 示例** 在IT领域,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Oracle则是一款广泛使用的数据库管理系统。将两者结合,我们可以构建一个功能丰富的网上商店系统,为用户提供...

    oracle示例数据库

    员工表包含:employees表,departments表,locations表,job_grades表,jobs表:

    使用oracle计算系统当前时间的毫秒数

    ### 使用Oracle计算系统当前时间的毫秒数 在IT领域,特别是数据库管理和应用程序开发中,时间戳是非常重要的数据类型之一。它可以用来记录事件的发生时间、处理时间等关键信息。对于Oracle数据库用户而言,有时需要...

    JSP Oracle 网上投票 示例

    JSP Oracle 网上投票 示例

    oracle示例数据库OT_oracle数据库

    "OT_oracle数据库"是一个示例数据库,专为学习Oracle数据库设计和管理而创建。这个压缩包包含了一些关键文件,帮助用户了解Oracle数据库的结构、数据操作以及用户管理。 1. **ot_data.sql**: 这个文件通常包含了...

    Oracle全课程示例

    Oracle全课程示例是一个全面介绍Oracle数据库开发的学习资源,涵盖了从基础到高级的各个层面。Oracle作为世界上最广泛使用的数据库管理系统之一,其强大的功能和灵活性使其在企业级应用中占据重要地位。本课程示例...

    oracle学习的示例代码

    "Oracle学习的示例代码"集合提供了一种实践性学习方法,帮助用户深入理解和掌握Oracle数据库的操作。这里的"proc"标签可能指的是PL/SQL过程,即Oracle数据库中的程序化组件,如存储过程、函数和包。 PL/SQL...

    Oracle计算年龄(精确到秒)

    通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒

    JSP Oracle 用户管理 示例

    在这个“JSP Oracle 用户管理 示例”中,我们可以探讨以下几个关键知识点: 1. **JSP基础**:JSP是基于Java的服务器端脚本语言,允许开发者在HTML或XML文档中嵌入Java代码,从而动态生成网页内容。JSP的主要组件...

    Oracle 11g

    7. **网格计算**:Oracle Grid Infrastructure支持网格计算,允许多台服务器共享资源,形成一个计算网格,提供高可用性和可扩展性。 8. **企业级XML处理**:Oracle 11g提供了强大的XML DB组件,支持XML数据的存储、...

Global site tag (gtag.js) - Google Analytics