当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 数据仓库基本报表制作过程中的SQL写法

MSSQL
获取MSSQL数据字典的SQL语句
Microsoft Search 服务无法启动 解决办法.
找出所有非xml索引并重新整理的sql
SQL Server提示"选定的用户拥有对象,所以无法除去该用户”
SQL Server"错误 21002: [SQL-DMO]用户 * 已经存在问题解决
删除重复记录,并且剩下一条
select * from sp_who的解决方案
Sql语句与存储过程查询数据的性能测试实现代码
MSSQL 游标使用 心得
SQL 时间类型的模糊查询
mssql 指定字段编号sql语句
sql server中的decimal或者numeric的精度问题
sql 数据库还原图文教程
存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)
MSSQL SERVER中的BETWEEN AND的使用
SQL Server约束增强的两点建议
SQL Server 更改DB的Collation
Oracle 10g各个帐号的访问权限、登录路径、监控状态命令查询等等
SQL Server的复制功能
sql 普通行列转换

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 78 ::
收藏到网摘: n/a

这篇论坛文章(赛迪网技术社区)主要介绍了数据仓库基本报表制作过程中的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)

)