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”重点讲解了Model子句的使用,特别是其在聚合操作中的应用。 Model子句的基本结构允许用户指定一个数据区域(即模型区域),在这个区域内对数据进行计算和操作...
《Pro Oracle SQL》一书的第9章深入探讨了Oracle数据库中的"Model"子句,这一章节重点关注如何使用Model子句来更新数据行。在Oracle SQL中,Model子句是一种强大的功能,允许进行复杂的行处理和模拟迭代计算,通常...
《Pro Oracle SQL》一书的第9章深入探讨了Oracle数据库中的“Model”子句,这一章节重点关注了9.5节——评估顺序。在Oracle SQL中,Model子句是一种高级的行处理工具,用于进行复杂的行计算和模拟迭代过程,比如解决...
《Pro Oracle SQL》一书中的第9章详细探讨了Oracle SQL中的“模型”子句,这一章的主题是“9.7 迭代”。在Oracle数据库中,模型子句是一种强大的功能,它允许用户进行复杂的多步骤计算,尤其适用于处理数组、矩阵...
《Pro Oracle SQL》一书中的第9章详细探讨了Oracle SQL中的“模型”子句,这一章重点关注了位置引用和符号引用的概念。在Oracle数据库中,模型子句是一种强大的工具,用于处理复杂的行列操作,例如数据建模、数据...
《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,其中第9章主要讲解了如何使用Model子句进行行间引用,这是一个高级SQL特性,用于处理复杂的行与行之间的计算和逻辑操作。9.2章节专注于Inter-Row Referencing...
《Pro Oracle SQL》一书的第9章,重点关注了使用"Model"子句进行性能调优的方法。在Oracle数据库中,Model子句是一种强大的功能,它允许数据建模和复杂的计算,尤其适用于解决多步骤计算问题,如模拟、预测和序列...
《Pro Oracle SQL》一书的第七章深入探讨了高级分组技术,特别是关于`HAVING`子句的部分。`HAVING`子句在SQL查询中扮演着至关重要的角色,它用于在聚合函数的结果集上设置条件,这与`WHERE`子句有所不同。`WHERE`...
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 ...
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提示 #### 一、SQL提示的定义及作用 在Oracle数据库的SQL语句中,SQL提示(Hints)是一种用于指导优化器选择特定执行计划的特殊注释语法。这些提示能够帮助数据库...
Clause-view个人中心、设置常用的itemview
资源分类:Python库 所属语言:Python 资源全名:clause-1.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...
### ORACLE和SQL Server的语法区别 #### 一、概述 本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle...
Oracle SQL查考手册是一部关于Oracle数据库查询语言的重要参考资料,它涵盖了运算符、表达式、条件、函数以及常见的SQL DDL(Data Definition Language)和Clause等内容。这篇总结将深入解析这些核心概念,帮助读者...
Chatopera 语义理解系统:机器学习,聊天机器人,意图识别clause-osc.zip