环比就是今年第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
分享到:
相关推荐
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 SQL 学习示例”压缩包提供了全面的实践案例,帮助你深入理解和掌握Oracle SQL的各种特性。通过逐一分析和运行这些示例,你不仅可以熟悉SQL语法,还能提升解决实际问题的能力。记住,实践是学习的...
ORACLE SQL使用示例 二.创建索引 三.创建约束 四.创建视图 五. 创建序列 六. 创建同义词 七.SQL DML数据操纵语句 八,SQL内部函数 九. PLSQL 结构化程序
Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth( employeeNo varchar2(20)...
在这个配置示例中,我们将深入探讨如何配置`tnsnames.ora`文件,这是Oracle TNS的主要配置文件。 首先,打开`tnsnames.ora`文件,通常它位于Oracle客户端的网络配置目录下,例如在Windows系统中可能是`%ORACLE_HOME...
下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个...
这是一个简单的oracle代码,可进行参考
"Oracle示例数据库OT"和"oracle示例数据库hr"是Oracle公司为了帮助用户熟悉其数据库系统而提供的两个典型示例数据库。这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的...
sample schemas创建与安装示例库脚本, Oracle 12CR2中在创建数据库时不能安装sample schemas。创建sample schemas只需执行db-sample-schemas-12.2.0.1目录下的mksample.sql脚本,mksample EXAMPLE TEMP $ORACLE_...
**JSP Oracle 网上商店 示例** 在IT领域,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Oracle则是一款广泛使用的数据库管理系统。将两者结合,我们可以构建一个功能丰富的网上商店系统,为用户提供...
员工表包含:employees表,departments表,locations表,job_grades表,jobs表:
### 使用Oracle计算系统当前时间的毫秒数 在IT领域,特别是数据库管理和应用程序开发中,时间戳是非常重要的数据类型之一。它可以用来记录事件的发生时间、处理时间等关键信息。对于Oracle数据库用户而言,有时需要...
JSP Oracle 网上投票 示例
"OT_oracle数据库"是一个示例数据库,专为学习Oracle数据库设计和管理而创建。这个压缩包包含了一些关键文件,帮助用户了解Oracle数据库的结构、数据操作以及用户管理。 1. **ot_data.sql**: 这个文件通常包含了...
Oracle全课程示例是一个全面介绍Oracle数据库开发的学习资源,涵盖了从基础到高级的各个层面。Oracle作为世界上最广泛使用的数据库管理系统之一,其强大的功能和灵活性使其在企业级应用中占据重要地位。本课程示例...
"Oracle学习的示例代码"集合提供了一种实践性学习方法,帮助用户深入理解和掌握Oracle数据库的操作。这里的"proc"标签可能指的是PL/SQL过程,即Oracle数据库中的程序化组件,如存储过程、函数和包。 PL/SQL...
通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒
在这个“JSP Oracle 用户管理 示例”中,我们可以探讨以下几个关键知识点: 1. **JSP基础**:JSP是基于Java的服务器端脚本语言,允许开发者在HTML或XML文档中嵌入Java代码,从而动态生成网页内容。JSP的主要组件...
7. **网格计算**:Oracle Grid Infrastructure支持网格计算,允许多台服务器共享资源,形成一个计算网格,提供高可用性和可扩展性。 8. **企业级XML处理**:Oracle 11g提供了强大的XML DB组件,支持XML数据的存储、...