数据仓库基本报表制作过程中的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)
)
猜你喜欢
- 1.什么是FBV和CBVFBV是指视图函数以普通函数的形式;CBV是指视图函数以类的方式。2.普通FBV形式def index(reques
- 1. 扩展Tensor维度相信刚接触Pytorch的宝宝们,会遇到这样一个问题,输入的数据维度和实验需要维度不一致,输入的可能是2维数据或3
- 1. str.format 的引入在 Python 中,我们可以使用 + 来连接字符串,在简单情况下这种方式能够很好的工作。但是当我们需要进
- 这里是说watch调用methods里方法的时候,页面经常会报找不到方法这个时候一定要在watch里去输出一下this,看看this包裹的壳
- 本文实例讲述了Python实现将数据写入netCDF4中的方法。分享给大家供大家参考,具体如下:nc文件为处理气象数据文件。用户可以去htt
- 制作自己的训练集下图是我们数据的存放格式,在data目录下有验证集与测试集分别对应iris_test, iris_train 为了向伟大的M
- vue在data中定义图片相对路径:data() { return { active: 1, ico
- 阅读目录什么是前端代码异常 window.onerror写一个js报错的上报库注意点:缺点:在平时的工作,js报错是比较常见的一个
- 今天学到Python 有一个名为 random 的内置模块,可用于生成随机数,这个好玩~可以用来做为上课随机点名的程序了哈哈。。def ma
- 什么是计算属性概念计算属性是vue里面为了简化在模板语法中对响应式属性做计算而存在的什么时候应该使用计算属性根据现有响应式的值得到一个新的值
- 这篇文章主要介绍了Javascript Worker子线程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- -- 1. 查看被锁的表SELECT p.spid, a.serial#, c.object_name, b.session_id, b.o
- 下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示:var arr=[1,3,6,3,7,9,2];conso
- 优化前后新老代码如下:from git_tools.git_tool import get_collect_projects, QQNews
- 一、configparser模块是什么可以用来操作后缀为 .ini 的配置文件;python标准库(就是python自带的意思,无需安装)二
- 用js封装一些常用的jquery方法 记录一下hasClass:判断是否有classfunction hasClass(ele, cls)
- 安装docker桌面程序从docker官网下载并安装桌面程序。安装好后启动桌面程序。若出现以下错误,说明你的docker 没有启动。1. d
- 本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下一、效果 二、代码1、单张图片拼接# 图片拼接fr
- 本文记录了python安装及环境配置方法,具体内容如下Python安装 Windowns操作系统中安装Python步骤一 下载安装包从Pyt
- 前言:NoxfileNox 默认在一个名为noxfile.py的文件中查找配置。在运行 nox 时,你可以使用 --noxfile参数指定其