首页 新闻 会员 周边

一个关于水晶报表的问题

1
悬赏园豆:10 [已解决问题] 解决于 2011-04-02 09:08

一个关于水晶报表的问题一直困扰着我,想不到好的解决办法:
我用的是VS2005+Acess
我的数据库表部分数据如下:
挂号时间                                   受理时间
RegDateTime                          CureDateTime
2005-7-25 07:10:21              2005-7-25 07:15:26
2005-7-25 13:13:21              2005-7-25 13:15:26
2005-7-28 12:55:01              2005-7-28 13:13:50
2005-8-4 07:11:21                2005-8-4 07:15:20
2005-8-4 07:17:29                2005-8-4 07:56:20
2005-8-5 08:09:56
2007-7-25 07:11:22
2010-5-15 07:10:21              2010-5-15 07:15:26
...... .......
RegDateTime对应的CureDateTime可能为空,
要做一个日报表统计:
查询一个日期段(2005-7-25到2010-8-8)的水晶报表数据统计,反应在水晶报表上的效果为:
日期                  受理人数
2010-7-25          2
2010-7-26
2010-7-27
2010-7-28          1
....
2010-8-3
2010-8-4            2
2010-8-5
....

怎么实现啊,重点难点有二个
(1)日期是连续的,有些日期是数据库中没有的
(2)受理人数是根据当天挂号时间RegDateTime的计数得出来的,可能要用到公式,具体公式怎么写

Eboss的主页 Eboss | 初学一级 | 园豆:190
提问于:2011-03-31 16:58
< >
分享
最佳答案
0

问题1 在生成数据源的时候用sql语句 生成一张日期连续的表 然后该表和 现有的表做左连接(left join)

问题2 用水晶的插入汇总 或者运行总和字段 对RegDateTime计数 就可以了

收获园豆:10
死白的man | 老鸟四级 |园豆:2135 | 2011-03-31 17:07
用sql语句生成的表是虚拟表喽,虚拟表跟实表怎么做联合查询啊,就算可以做联合查询,那设计水晶报表模板时怎么添加那个连续日期的字段啊?
Eboss | 园豆:190 (初学一级) | 2011-04-01 16:19
DECLARE @dt1 datetime;
declare @dt2 datetime;

set @dt1='2010-01-01'
set @dt2='2010-01-30'

drop table #dt
create table #dt(mydt datetime)
while (@dt1<=@dt2)
begin

insert into #dt values (@dt1)
set @dt1=dateadd(dd,1,@dt1)

end
select t.mydt,a.* from #dt t left join yourtable a on t.mydt=a.dt

drop table #dt

希望你能看明白
死白的man | 园豆:2135 (老鸟四级) | 2011-04-01 16:41
还有一种办法就是在数据库中单独新建一张表 那张表里预先填充好10年的日期 ;或者你可以用sql代理 每天自动添加日期 ;这样做效率上比我上面写的代码高,而且比较简单
死白的man | 园豆:2135 (老鸟四级) | 2011-04-01 16:57
嗯,谢谢啊
Eboss | 园豆:190 (初学一级) | 2011-04-02 09:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册