Oracle 11g学习笔记–model子句(2)

■presentnnv
presentnnv(cell, expr1, expr2)如果cell引用的单元在model子句执行之前已经存在,并且该单元的值不为空,则返回表达式expr1。如果记录不存在,或单元值为空,则返回表达式expr2;

sales_amount[for month from 1 to 3 increment 1, 2004] = presentnnv(sales_amount[currentv(), 2003], round(sales_amount[currentv(), 2003] * 1.252), 0)

■ignore nav 和 keep nav
此关键词使用在 model后面;

ignore nav返回值如下:
●空值或缺失数字值时返回0
●空值或缺失字符串值时返回空值字符串
●空值或缺失日期值时返回01-jan-2000。
●其它所有数据库类型时返回空值

keep nav对空值或缺失数字值返回空值,默认条件;

select ..... from table model ignore nav paratition by .... dimension by .... measures ....... 更新已有的单元

默认情况下,如果表达式左端的引用单元存在,则更新该单元。如果该单元不存在,就在数组中创建一条新的记录。可以用rules update 改变这种默认行为,支出在单元不存在的情况下不创建新纪录;

为了验证效果,我们引用本文开头的代码:

select prd_type_id, year, month, sales_amount from all_sales where prd_type_id between 1 and 2 and emp_id = 21 model partition by (prd_type_id) dimension by (month, year) measures (amount sales_amount) rules update ( sales_amount[1, 2004] = sales_amount[1, 2003], sales_amount[2, 2004] = sales_amount[2, 2003] + sales_amount[3, 2003], sales_amount[3, 2004] = round(sales_amount[3, 2003] * 1.25, 2) ) order by prd_type_id, year, month;

这里写图片描述

引用从图中可以看出已经没有2004年的数据了;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/46e743af61ae4b2c4e08f99ed14ee4c1.html