Oracle中使用SQLMODEL定义行间计算(3)

文章作者 100test 发表时间 2007:03:14 13:56:33
来源 100Test.Com百考试题网


4.您希望通过单一查询来更新多个国家/地区的多种产品在数年中的销售,并且还希望插入新的单元格。通过将数个规则置于一个查询中,处理会更加高效,因为这减少了需要访问数据的次数。它还允许使用更为简洁的 SQL,以使开发人员的工作效率更高。从 SQL*Plus 会话中,执行以下脚本:

@c:\wkdir\pos_sym.sql 



pos_sym.sql 脚本包含以下内容: SELECT SUBSTR(country,1,20) country, 

SUBSTR(prod,1,15) prod, year, sales

FROM sales_view WHERE country IN (Italy,Japan) 

MODEL RETURN UPDATED ROWS

   PARTITION BY (country) 

   DIMENSION BY (prod, year)

   MEASURES (sale sales)

   RULES ( 

   sales[Bounce, 2002] = sales[Bounce, year = 2001] , 

   --positional notation: can insert new cell

   sales[Y Box, year>2000] = sales[Y Box, 1999], 

   --symbolic notation: can 0update existing cell

   sales[2_Products, 2005] = 

   sales[Bounce, 2001]   sales[Y Box, 2000] )

   --positional notation: permits insert of new cells 

   --for new product

ORDER BY country, prod, year

/

该示例数据没有超出 2001 年的值,因此所有涉及到 2002 年或之后的规则都要求插入新的单元格。对于此处定义的任何新产品名也是如此。在第三条规则中,2_Products 被定义为 2005 年的销售是 2001 年 Bounce 销售与 2000 年 Y Box 销售总和的产品。

对于 2002 年的 Bounce,第一个规则将插入新的单元格,因为这是位置表示法。对于 Y Box,第二个规则使用符号表示法,但是此处已经有了 2001 年的 Y Box 值,因此它将更新这些值。对于 2005 年的 2_Products,第三个规则是位置表示法,因此它可以插入新的单元格,您将在输出中看到这些新单元格。

在规则右侧使用多单元格引用

早先的示例只能在规则的左侧使用多单元格引用。如果要在规则右侧引用多个单元格,您可以在规则右侧使用多单元格引用,在这种情况下,需要对其应用聚合函数,以将它们转换为单一值。可以使用所有现有的聚合函数,包括 OLAP 聚合函数(逆分配函数、虚拟等级和分配函数等)、统计聚合函数以及用户定义的聚合函数。

1.您希望预测 2005 年 Bounce 在意大利的销售比其在 1999 至 2001 年间的最大销售多 100。为此,您需要在规则右侧使用 BETWEEN 子句来指定多个单元格,并通过 MAX() 函数将其聚合为单一值。从 SQL*Plus 会话中,执行以下脚本:

@c:\wkdir\multi_c.sql 



multi_c.sql 脚本包含以下内容: SELECT SUBSTR(country,1,20) country, 

SUBSTR(prod,1,15) prod, year, sales

FROM sales_view

WHERE country=Italy

MODEL RETURN UPDATED ROWS

   PARTITION BY (country) 

   DIMENSION BY (prod, year)

   MEASURES (sale sales)

   RULES (

   sales[Bounce, 2005] = 

   100   max(sales)[Bounce, year BETWEEN 1998 AND 2002] )

ORDER BY country, prod, year

/

请注意,聚合函数只出现在规则的右侧。聚合函数的参数可以是常量、约束变量、MODEL 子句的度量或者涉及这三种参数的表达式。


相关文章


Oracle数据仓库的分层管理器解决方案(2)
入门基础:认识OracleSQL内置函数(1)
用Oracle闪回功能恢复偶然丢失的数据(2)
用Oracle闪回功能恢复偶然丢失的数据(1)
Oracle中使用SQLMODEL定义行间计算(3)
Oracle中使用SQLMODEL定义行间计算(2)
Oracle中使用SQLMODEL定义行间计算(1)
ORACLE中常用的SQL语法和数据对象
教你用Linux完成Oracle自动物理备份
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛