数据仓库基本报表制作过程中的SQL写法

作者:水晶 时间:2008-11-25 12:17:00 

这篇论坛文章(赛迪网技术社区)主要介绍了数据仓库基本报表制作过程中的SQL写法,详细内容请参考下文:

在数据仓库的基本报表制作过程中,通常会使用SQL作为数据源,可是普通的SQL实在不适合处理一些较为复杂的逻辑判断;一般而言,待查询的数据类型主要包括日期型、数字型、字符串这三类数据类型;在报表查询界面前段,实际上会对查询的数据作一些缺省处理,例如有些字段可输可不输,输入的字段需要按照输入的内容进行查询,而未输入的字段通常会选择忽略该条件的存在,如何判断该字段是否输入了呢,当然是针对这些未输入的字段提供一些缺省值了,例如某个数字类型的字段未输入,则赋一个缺省值-1,某个字符串字段未输入,则赋一个缺省值为’ ‘,某个日期未输入,则赋一个缺省值为SYSDATE;这个时候只要在SQL中针对不同的缺省值和应该输入的值进行处理就OK了。

当然当更加复杂的查询逻辑实在不适合用SQL处理时,最好选择使用存储过程的方法了;其次过于复杂的SQL可能会带来数据库性能问题,因此这些基于SQL的报表最好不要在大型数据表上操作。

下面是构造了一个包含以上三种数据类型的数据表,并填充了一些测试数据。


CREATE TABLE TestReportParameter

(

VarcharField VARCHAR2(20),

NumberField NUMBER(10,0),

DateField DATE

);

INSERT INTO TestReportParameter VALUES('a',1,SYSDATE-1);

INSERT INTO TestReportParameter VALUES('b',2,SYSDATE);

INSERT INTO TestReportParameter VALUES('c',3,SYSDATE+2);

INSERT INTO TestReportParameter VALUES('d',4,SYSDATE-2);

COMMIT;

处理的秘密在于对缺省值和输入值之间做一个判断,保持任何一种值的存在为TRUE即可。

对于单值数据的处理比较简单,参看下面脚本

SELECT *

FROM TestReportParameter

WHERE (' ' = &VarcharField OR VarcharField = &VarcharField)

AND (-1 = &NumberField OR NumberField = &NumberField)

对于多选值的处理则一定要使用DECODE函数才能避免错误的发生,处理的逻辑同上。


SELECT *

FROM TestReportParameter

WHERE (

' '=DECODE(&VarcharField,' ',' ',&VarcharField)

OR

VarcharField IN (&VarcharField)

)

AND (

-1=DECODE(&NumberField,-1,-1,&NumberField)

OR

NumberField IN (&NumberField)

)

标签:
0
投稿

猜你喜欢

  • sqlserver数据库迁移后,孤立账号解决办法

    2011-10-24 20:01:40
  • 配置SQL Server 2000选项

    2010-04-25 11:01:00
  • ajax 同步请求和异步请求的差异分析

    2011-07-05 12:36:04
  • oracle 日期函数

    2010-07-23 13:32:00
  • 无组件上传图片到数据库中,asp解决方案

    2007-08-03 13:22:00
  • Google首页的CSS Sprite

    2007-09-29 21:36:00
  • CSS处理斜角导航条的一个例子

    2007-08-27 12:38:00
  • js查找/搜索页面中的字符源代码

    2008-02-17 17:13:00
  • AJAX中文乱码解决

    2009-07-03 13:43:00
  • 微软证实最新的关键SQL Server漏洞

    2008-12-23 13:31:00
  • 菜鸟课堂:玩转MySQL数据库 性能优化八法

    2009-03-25 14:44:00
  • 一位网友的DIV CSS编码笔记——XieBiji

    2008-09-12 12:22:00
  • ASP显示当前在线人数统计代码

    2010-04-24 15:47:00
  • 如何防止未经注册的用户绕过注册界面直接进入应用系统?

    2009-11-22 19:22:00
  • 不用Global.asa也能实现统计在线人数吗?

    2009-10-29 12:28:00
  • System.Data.OleDb.OleDbDataAdapter与System.Data.OleDb.OleDbDataReader的区别是什么?

    2009-10-29 12:17:00
  • 数据库Oracle数据的异地的自动备份

    2010-07-27 13:28:00
  • ASP生成XML文件

    2009-06-29 16:28:00
  • Web设计的成就感

    2009-09-04 19:02:00
  • MySQL的6种日志详解

    2008-12-18 14:36:00
  • asp之家 网络编程 m.aspxhome.com