利用Oracle 10g的 MODEL SQL进行行间计算(2)
来源:互联网 发布:二战德国和苏联知乎 编辑:程序博客网 时间:2024/05/22 03:23
规则也可以是多个维度不同取值,本例假定不同年份之间比较,比如要求2008年的'10'=2007年的'30'+'31'
SELECT year,code,
p_id, v1
FROM t603_2
WHERE code IN ('600001','600002')
MODEL RETURN UPDATED ROWS
PARTITION BY (code)
DIMENSION BY (p_id,year)
MEASURES (v1)
RULES (
v1['err1',2008] = v1['30',2007] + v1['31',2007] -v1['10',2008])
ORDER BY code, p_id;
YEAR CODE P_ID V1
---- ---------- ------- ----------
2008 600001 err1 0
2008 600002 err1 1
如果年份很多,每个年份都是和上年比较,这种描述可以用CV()函数简化
SQL> insert into t603_2 select '2006' year,code,p_id,v1,v2 from t603_1;
SELECT year,code,
p_id, v1
FROM t603_2
WHERE code IN ('600001','600002')
MODEL RETURN UPDATED ROWS
PARTITION BY (code)
DIMENSION BY (p_id,year)
MEASURES (v1)
RULES (
v1['err1',for year in( 2007 ,2008)] = v1['30',CV(year)-1] + v1['31',CV(year)-1] -v1['10',CV(year)])
ORDER BY code, p_id;
YEAR CODE P_ID V1
---- ---------- ------- ----------
2007 600001 err1 0
2008 600001 err1 0
2007 600002 err1 1
2008 600002 err1 1
如果year是数值类型,还可以用for year from 2007 to 2009 increment 1的语法,如果是其他类型,还可以用在in子句带子查询的办法,
比如for year in (select year from t603_2)。
但需要注意不能采用year in 的语法,year in的语法只能符号引用已经存在的单元格,而v1['err1',x]是新单元格。
单个年份的写法如下:
SELECT year,code,
p_id, v1
FROM t603_2
WHERE code IN ('600001','600002')
MODEL RETURN UPDATED ROWS
PARTITION BY (code)
DIMENSION BY (p_id,year)
MEASURES (v1)
RULES (
v1['err1',2008] = v1['30',CV()] + v1['31',CV()] -v1['10',CV()])
ORDER BY code, p_id;
YEAR CODE P_ID V1
---- ---------- ------- ----------
2008 600001 err1 0
2008 600002 err1 1
而
SELECT year,code,
p_id, v1
FROM t603_2
WHERE code IN ('600001','600002')
MODEL RETURN UPDATED ROWS
PARTITION BY (code)
DIMENSION BY (p_id,year)
MEASURES (v1)
RULES (
v1['err1',year in ('2008')] = v1['30',CV()] + v1['31',CV()] -v1['10',CV()])
则返回0行
- 利用Oracle 10g的 MODEL SQL进行行间计算
- 利用Oracle 10g的 MODEL SQL进行行间计算(2)
- oracle model 入门(行间计算)
- 一种SQL计算行间四则运算的办法
- 利用透明网关,实现Oracle 10g与SQL 2000数据的定时交换
- 简化SQL式计算之行间计算
- rails 中 不利用 model 来进行动态 sql 运行的几种方法。
- rails 中 不利用 model 来进行动态 sql 运行的几种方法。
- Oracle 10g的SQL语句问题??
- 设置行间距,计算带行间距的文本高度
- 利用Oracle 10G的正則表達式分析字串
- 用oracle 10g的OEM进行数据导入导出
- Oracle 10G RAC - SYSAUX进行完全恢复的问题
- Oracle Database 10g SQL
- Oracle 10g PL/SQL
- oracle 10g SQL函数
- SQL技巧:利用阶梯式累加进行累计数量的计算
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
- 服饰搭配收藏
- net2003转到net2005碰到的一个问题:不会实现接口成员“System.Web.IHttpHandler.IsReusable”
- web开发之制作页面弹出窗口(url传参提交)
- 成功在 FreeMarker 网站上增加了 VelocityWeb 项目介绍!
- 湾仔枪神
- 利用Oracle 10g的 MODEL SQL进行行间计算(2)
- 作业
- extern "C"
- 让所有控件同时更改为相同字体的方法
- ARM使用术语清除(flush)和清理(clean)表示对cache的两种基本操作
- "The rowset is not bookmarkable"出错
- 使用myeclipse使用hibernate配置
- 最近在用tomcat6 发表些心得
- 配置tommcat监听多个端口