`

oracle子句model的梳理

阅读更多

1:规则rules的使用

select ArrValue,soeji
from(select 'abcdefghijklmn' as ArrValue,1 as soeji from dual) model
dimension by(soeji) measures(ArrValue)
rules(ArrValue[1] = 'Hello World');

--rules的缺省行为是存在就更新,不存在则追加

/*使用model return updated rows的话,被rules更新或者插入的行才显
示,没有更新过的行不再作为SQL的结果。*/
select ArrValue,soeji
from(select 'abcdefghijklmn' as ArrValue,1 as soeji from dual)
model return updated rows
dimension by(soeji)
measures(ArrValue)
rules(ArrValue[1] = 'Hello World');


select ArrValue,soeji
from(select 'abcdefghijklmn' as ArrValue,1 as soeji from dual)
model return updated rows
dimension by(soeji)
measures(ArrValue)
rules(ArrValue[null] = ArrValue[1]+ArrValue[1]+ArrValue[1]);


SELECT id,year,month,sales_amount
FROM table_name
WHERE id BETWEEN 1 and 2
AND e_id=21
MODEL
PARTITION BY(id)
DIMENSION BY(month , year)
MEASURES (amount sales_amount) (
  sales_amount[1,2004] = sales_amount[1,2003],
  sales_amount[2,2004] = sales_amount[2,2003],
  sales_amount[3,2004] = ROUND(sales_amount[3,2003]*1.24,2)
)
ORDER BY id, year,month;


更新已有单元、阻止创建新单元(RULES UPDATE):
默认情况下,表达式左边单元如果已经存在,则更新其值,不存在则创建一条新记录
使用RULES UPDATE 可以阻止创建新记录
MEASURE(month, year)
RULES UPDATE(
  sales_amount[FOR month FROM 1 TO 3 INCREMENT 1 ,2004] = sales_amount[CURRENTV(), 2003]
)

 

2:规则MEASURES的使用

使用BETWEEN AND 返回特定范围的数据
sales_amount[1,2004] = ROUND(AVG(sales_amount)[month BETWEEN 1 AND 3,2003],2)


使用ANY 和 IS ANY 访问说有数据单元
ANY匹配的是位置标记,IS ANY 匹配的是符号标记,意思是ANY 所在的位置上,对应该列的所有值,IS ANY 要跟列名合在一齐用
sales_amount[1,2004] = ROUND(SUM (sales_amount)[ANY, year IS ANY], 2)


用CURRENTV()获取某个维度的当前值
sales_amount[1,2004] = sales_amount[CURRENTV(),2003]

for循环访问数据单元
sales_amount [FOR month FROM 1 TO 3 INCREMENT 1, 2004] = sales_amount[CURRENTV(),2003]


处理空值和缺失值

IS PRESENT:
sales_amount[1,2004] =
CASE
WHEN sales_amount[CURRENTV(),2003] IS PRESENT THEN
  sales_amount[CURRENTV(),2003]
ELSE
  0
END


PRESENTV(): 如果cell在MODEL子句前已经存在,PRESENTV(cell, expr1, expr2) 返回表达式1,如果不存在返回expr2
sales_amount[1,2004] = PRESENTV(sales_amount[CURRENTV(),2003], sales_amount[CURRENTV(),2003] , 0)

 

分享到:
评论

相关推荐

    Oracle中使用SQL MODEL定义行间计算.pdf

    在Oracle数据库10g中,`MODEL`子句提供了一种强大而灵活的方法来执行行间计算,它允许用户根据查询结果定义多维数组,并将规则应用于这些数组以计算新值。与传统方法(如在应用程序或PC电子表格中进行计算)相比,...

    Oracle中使用SQL MODEL定义行间计算

    Oracle中的SQL MODEL子句是一种强大的工具,用于在数据库内执行复杂的行间计算,它允许用户在不依赖外部应用程序或电子表格的情况下对数据进行高级处理。MODEL子句的主要优点在于其性能提升、可伸缩性和可管理性,...

    08.Oracle的where子句1

    Oracle的WHERE子句是SQL查询语句中至关重要的一部分,它用于在从数据库中检索数据时定义特定的筛选条件。在本教程中,我们将探讨WHERE子句的语法、使用方法以及如何与其他运算符结合来增强查询功能。 首先,我们...

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.4Returning Updated Rows

    《Pro Oracle SQL》一书的第9章深入探讨了Oracle数据库中的"Model"子句,这一章节重点关注如何使用Model子句来更新数据行。在Oracle SQL中,Model子句是一种强大的功能,允许进行复杂的行处理和模拟迭代计算,通常...

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.6 Aggregation

    在Oracle数据库中,Model子句是一种强大的SQL工具,用于处理复杂的建模和计算任务,尤其在数据建模、预测分析以及复杂的数据转换方面表现出色。本章“《Pro Oracle SQL》CHAPTER 9 The Model Clause”重点讲解了...

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.5 Evaluation Order

    《Pro Oracle SQL》一书的第9章深入探讨了Oracle数据库中的“Model”子句,这一章节重点关注了9.5节——评估顺序。在Oracle SQL中,Model子句是一种高级的行处理工具,用于进行复杂的行计算和模拟迭代过程,比如解决...

    《Pro Oracle SQL》CHAPTER 9 -- 9.10Performance Tuning with the Model Clause

    《Pro Oracle SQL》一书的第9章,重点关注了使用"Model"子句进行性能调优的方法。在Oracle数据库中,Model子句是一种强大的功能,它允许数据建模和复杂的计算,尤其适用于解决多步骤计算问题,如模拟、预测和序列...

    DatabaseHelper_oracle_c#Oracle_C#_ManagedDataAccess_oracle操作_

    在.NET开发环境中,使用C#语言与Oracle数据库进行交互是一种常见的需求。Oracle.ManagedDataAccess是Oracle公司提供的一个客户端库,专门用于C#等.NET语言的Oracle数据库连接和操作。这个库是完全托管的,无需依赖...

    Oracle使用技巧之case子句的用途.docx

    Oracle使用技巧之case子句的用途.docx

    《Pro Oracle SQL》CHAPTER 9 -- 9.2 Inter-Row Referencing via the Model clause

    《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,其中第9章主要讲解了如何使用Model子句进行行间引用,这是一个高级SQL特性,用于处理复杂的行与行之间的计算和逻辑操作。9.2章节专注于Inter-Row Referencing...

    oracle中where 子句和having子句中的区别介绍

    在Oracle数据库中,`WHERE`子句和`HAVING`子句都是用于限制查询结果的条件,但它们在使用场景和功能上有显著的区别。 首先,`WHERE`子句主要用于筛选单个行的数据,它不能与`GROUP BY`子句一起出现在查询的同一层次...

    oracle RETURNING 子句使用方法

    Oracle的RETURNING子句是数据库操作中的一个强大特性,它允许在执行INSERT、UPDATE或DELETE语句时直接获取处理的数据结果。这在处理事务时非常有用,尤其是当你需要基于新插入或更新的数据进行进一步操作时。 1. **...

    Oracle start with.connect by prior子句实现递归查询

    ### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 的查询语句执行顺序相同:开始->FROM 子句->WHERE 子句->GROUP BY 子句->HAVING 子句->ORDER BY 子句->SELECT 子句->LIMIT 子句。每个子句执行后都会产生一个中间结果,供接下来的子句...

    树状数据库表:Oracle中start with...connect by prior子句用法

    总结来说,`START WITH...CONNECT BY PRIOR`子句是Oracle SQL处理树形数据的关键工具,通过它可以有效地查询和展示层次关系的数据。理解并熟练运用这个子句,能够帮助你在处理具有层级结构的业务场景时更加游刃有余...

    Oracle SQL高级编程

    第9章 Model子句 225 第10章 子查询因子化 254 第11章 半联结和反联结 292 第12章 索引 334 第13章 SELECT以外的内容 360 第14章 事务处理 386 第15章 测试与质量保证 415 第16章 计划稳定性与控制 443

    oracle基础练习题及答案

    "oracle基础练习题及答案" Oracle 是一种关系数据库管理系统,它提供了强大的数据存储和管理功能。在实际应用中,Oracle 数据库管理员需要具备一定的 SQL 语句编写能力和数据库管理知识。下面是 Oracle 基础练习题...

Global site tag (gtag.js) - Google Analytics