关于数据仓库中复杂报表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 ,如需转载请自行联系原作者
相关文章
|
4月前
|
关系型数据库 BI 分布式数据库
PolarDB NL2BI解决方案,让你不懂SQL也能进行数据查询分析并生成BI报表
无需创建和开通资源,在预置环境中免费体验PolarDB MySQL及其NL2BI解决方案
PolarDB NL2BI解决方案,让你不懂SQL也能进行数据查询分析并生成BI报表
|
3月前
|
SQL Oracle 关系型数据库
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
32 0
|
2月前
|
SQL 监控 Cloud Native
云数据仓库ADB问题之创建物化视图时报错SQL错误如何解决
云数据仓库AnalyticDB是阿里云提供的一种高性能、弹性扩展的云原生数据仓库解决方案;本合集将深入探讨ADB的架构、性能调优、数据管理和应用场景等,以及如何解决在使用过程中可能出现的问题,提高数据仓库的使用效率。
57 5
|
6月前
|
SQL 关系型数据库 BI
通过WebShell登录SQL Server主机并使用SSRS报表服务
本文将为您介绍如何使用RDS实例的主机账号登录到RDS SQL Server实例主机中。您可以在登录主机后使用SSRS(SQL Server Reporting Services)服务管理和操作SQL Server数据库。
通过WebShell登录SQL Server主机并使用SSRS报表服务
|
8月前
|
SQL 存储 缓存
关于数据仓库的Hive的Hive架构的Driver的SQL的解析器、编译器、执行器、优化器
数据仓库是一个面向分析的数据存储系统,其中包含了大量的历史数据,可以用于数据分析和报表生成。Hive是一个开源的数据仓库系统,基于Hadoop平台,可以存储和处理大规模的数据。在Hive中,SQL语句被解析器解析成抽象语法树(AST),然后编译器将其转换成物理执行计划,包括执行器和优化器的参与。本文将介绍Hive中SQL解析器、编译器、执行器和优化器的作用和原理。
278 0
|
11月前
|
存储 SQL Cloud Native
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(上)
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(上)
|
11月前
|
SQL 存储 缓存
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(下)
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(下)
|
11月前
|
SQL 并行计算 Cloud Native
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(下)——三、SQL性能调优(上)
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(下)——三、SQL性能调优(上)
|
11月前
|
存储 SQL 监控
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(下)——三、SQL性能调优(下)
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(下)——三、SQL性能调优(下)
|
11月前
|
SQL Cloud Native 关系型数据库
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——五、执行SQL查询
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——五、执行SQL查询

热门文章

最新文章