`

《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.9 NULLs

阅读更多

NULLs    (page 291)
    In SQL statements using Model SQL, values can be null for two reasons: null values in the existing
cells and references to non-existent cells. I will discuss the later scenario in this section.  
By default, the reference to non-existent cells will return null values. In Listing 9-21, the rule in
line 10 is accessing the Sale column for the year =2002 and the week =1 using the clause  sale[2002,1].
There is no data in the sales_fact table for the year 2002 and so sale[2002,1] is accessing a non-
existent cell. Output in this listing is null due to the arithmetic operation with a null value.
In Line 4, I added a  KEEP NAV clause after the Model keyword explicitly even though  KEEP NAV is the
default value. NAV stands for Non Available Values and reference to a non-existent cell returns a null
value by default.

    使用Model子句的SQL,有两种情况会导致值为null:单元格存在null值和引用了非存在的单元格。在本节我讨论后面这种情况。默认情况下,引用非存在的单元格将返回null值。在列表9-21中,第10行的规则用子句sale[2002,1]访问year =2002 且 week =1的Sale列。在sales_fact表中没有2002年的数据,因此sale[2002,1]访问的是非存在的单元格。因为与null值进行算术运 算所以该列的输出是null。在第4行,我在Model关键字之后显示的加KEEP NAV 子句,尽管KEEP NAV是默认值。NAV代表Non Available Values,而默认情况下引用非存在的单元格将返回null值。
Listing 9-21 KEEP NAV Example
 1   select product, country,year,week,sale
 2    from sales_fact
 3    where country in ('Australia') and product = 'Xtend Memory'
 4    model KEEP NAV return updated rows
 5    partition by (product,country)
 6    dimension by (year, week)
 7    measures (sale)
 8    rules sequential order(
 9         sale[2001,1] order by year, week = sale[2001,1],
10        sale[2002,1] order by year,week = sale[2001,1] + sale[2002,1]
11)
12 *     order by product, country, year, week

PRODUCT                        COUNTRY YEAR WEEK    SALE
------------------------------     ----------     -----     ----           -------
Xtend Memory                   Australia   2001    1               92
Xtend Memory                   Australia   2002    1
    This default behavior can by modified using the IGNORE NAV clause. Listing 9-22 shows an example. If the non-existent cells are accessed, then 0 is returned for numeric columns and an empty string is returned for text columns instead of null values. You can see that the output in Listing 9-22 shows that a value of 92.26 is returned for the clause sale[2001,1] + sale[2002,1] as zero is returned for the non existing cell sale[2002,1].
    可用IGNORE NAV子句改变默认行为。 列表9-22展示了一个例子。若访问了非存在的单元格,则替换null,数值列将返回0而文本列将返回空串。 你可从列表 9-22的输出中看到,对子句sale[2001,1] + sale[2002,1] 返回了值92.26,因为非存在的单元格sale[2002,1]返回0。
Listing 9-22. IGNORE NAV
1   select product, country,year,week,sale
 2    from sales_fact
 3    where country in ('Australia') and product = 'Xtend Memory'
 4    model IGNORE NAV return updated rows
 5    partition by (product,country)
 6    dimension by (year, week)
 7    measures (sale)
 8    rules sequential order(
 9         sale[2001,1] order by year, week = sale[2001,1],
10        sale[2002,1] order by year,week = sale[2001,1] + sale[2002,1]
11)
12 *     order by product, country, year, week
PRODUCT                        COUNTRY   YEAR WEEK    SALE
------------------------------     ----------       -----       ----           -------
Xtend Memory                   Australia      2001    1             92
Xtend Memory                   Australia      2002    1             92

    The functions PRESENTV and PRESENTNNV are also useful in handling NULL values. Refer to the earlier section called "Iteration" for discussion and examples of these two functions.
    函数PRESENTV 和PRESENTNNV对于处理NULL值也很有用。参考之前“Iteration”一节对这两个函数讨论和例子。

 

 

分享到:
评论

相关推荐

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

    本章“《Pro Oracle SQL》CHAPTER 9 The Model Clause”重点讲解了Model子句的使用,特别是其在聚合操作中的应用。 Model子句的基本结构允许用户指定一个数据区域(即模型区域),在这个区域内对数据进行计算和操作...

    《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.5 Evaluation Order

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

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.7 Iteration

    《Pro Oracle SQL》一书中的第9章详细探讨了Oracle SQL中的“模型”子句,这一章的主题是“9.7 迭代”。在Oracle数据库中,模型子句是一种强大的功能,它允许用户进行复杂的多步骤计算,尤其适用于处理数组、矩阵...

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.3 Positional and Symbolic Refere

    《Pro Oracle SQL》一书中的第9章详细探讨了Oracle SQL中的“模型”子句,这一章重点关注了位置引用和符号引用的概念。在Oracle数据库中,模型子句是一种强大的工具,用于处理复杂的行列操作,例如数据建模、数据...

    《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...

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

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

    《Pro Oracle SQL》Chapter7 Advanced Grouping -- 7.2HAVING Clause

    《Pro Oracle SQL》一书的第七章深入探讨了高级分组技术,特别是关于`HAVING`子句的部分。`HAVING`子句在SQL查询中扮演着至关重要的角色,它用于在聚合函数的结果集上设置条件,这与`WHERE`子句有所不同。`WHERE`...

    Pro Oracle SQL

    Pro Oracle SQL unlocks the power of SQL in the Oracle Database—one of the most potent SQL implementations on the market today. To master it requires a three-pronged approach: learn the language ...

    oracle advanced sql 高级SQL教程 ORACLE官方教材

    Walking the Tree: From the Top Down 5-9 Ranking Rows with the LEVEL Pseudocolumn 5-10 Formatting Hierarchical Reports Using LEVEL and LPAD 5-11 Pruning Branches 5-13 Summary 5-14 Practice 5 Overview 5...

    Oracle SQL 优化与调优技术详解-附录:SQL提示.pdf

    ### Oracle SQL 优化与调优技术详解:深入理解SQL提示 #### 一、SQL提示的定义及作用 在Oracle数据库的SQL语句中,SQL提示(Hints)是一种用于指导优化器选择特定执行计划的特殊注释语法。这些提示能够帮助数据库...

    Clause-view个人中心、设置常用的itemview

    Clause-view个人中心、设置常用的itemview

    Python库 | clause-1.1.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:clause-1.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Oracle和SqlServer语法区别

    Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...

    ORACLE和SQL Server的语法区别

    ### ORACLE和SQL Server的语法区别 #### 一、概述 本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle...

    Oracle SQL查考手册chm

    Oracle SQL查考手册是一部关于Oracle数据库查询语言的重要参考资料,它涵盖了运算符、表达式、条件、函数以及常见的SQL DDL(Data Definition Language)和Clause等内容。这篇总结将深入解析这些核心概念,帮助读者...

    Chatopera 语义理解系统:机器学习,聊天机器人,意图识别clause-osc.zip

    Chatopera 语义理解系统:机器学习,聊天机器人,意图识别clause-osc.zip

Global site tag (gtag.js) - Google Analytics