关于数据仓库中复杂报表SQL语句的写法
原创于2008年04月02日,2009年10月18日迁移至此。
在数据仓库的基本报表制作过程中,通常会使用
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,' ',' ',&
相关文档:
1 ,对于日期字段字段
access表示为:#1981-28-12#
SQLSERVER2000表示为:''1981-02-12''
2,SQL语句区别,select ,update 在对单表操作时都差不多,
但多表操作时update语句的区别ACCESS与SQLSERVER中的Update语句对比:
SQLSERVER中更新多表的Update语句:
Update Tab1
SET a.Name = b.Name
from Tab1 a,Tab2 b
Whe ......
import java.sql.*;
/*
* JAVA连接ACCESS,SQL Server,MySQL,Oracle数据库
*
* */
public class JDBC {
public static void main(String[] args)throws Exception {
Connection conn=null;
//====连接ACCESS数据库 ......
http://www.umgr.com/blog/PostView.aspx?bpId=36294
1. 执行sql语句
int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callbacksql 语法
, void *, char **errmsg );
这就是执行一条 sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。
第2个参数const char ......
作者: 三十而立时间:2009年10月17日 16:47:21请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“inthirties(三十而立)”和出处”http://blog.csdn.net/inthirties/archive/2009/10/17/4688273.aspx”,深入讨论可以联系inthirties@gmail.com。在Oracle的开发管理中,PLSQLdev/TODA 和Oracle sql devel ......
Sql Server 中一个非常强大的日期格式化函数
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GE ......