开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于数据仓库中复杂报表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)
      ) 

 







本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/309668,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
0 0
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
0 0
SQL语句优化方法
SQL语句优化方法
0 0
使用SQL语句 查询电话号码 加密显示
使用SQL语句 查询电话号码 加密显示
0 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
0 0
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
0 0
数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(2)
数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(2)
0 0
数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(1)
数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(1)
0 0
SQL常用语句
SQL常用语句
0 0
一条SQL更新语句的执行过程
一条SQL更新语句的执行过程
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
用SQL做数据分析
立即下载
阿里云流计算 Flink SQL 核心功能解密
立即下载
Comparison of Spark SQL with Hive
立即下载