动态列报表

        由于在项目中需要用到动态列,类似下图效果,其中列和行都是动态产生的.起初接到这个要求,觉得有点难度,但有问题了应该迎难而上,在仔细研究及细细摸索下,却发现也不会太难,现写下此博客,希望对有此需要的朋友起到一定的帮助.

 2014-06-012014-06-022014-06-032014-06-042014-06-052014-06-062014-06-072014-06-082014-06-09
 12:378.0008:034.0008:062.0008:072.0008:002.0008:102.0007:592.0008:034.0008:012.00
   12:385.0012:328.0012:368.0012:328.0012:378.0008:113.8012:335.0008:1010.30
           12:487.0012:318.0012:437.0012:355.00
日消费 8.00 9.00 10.00 10.00 10.00 17.00 13.80 16.00 17.30

 由于以前做过水晶报表和SSRS报表,个人认为此种情况下还是SSRS报表做起来比较方便. 但想到提出要求的数据存储在SQL2000服务器上,这里又存在一个问题,就是如何给分组编一个行号. 但办法总比问题多.努力了总会有收获.现将代码帖下,当然,如果是SQL2005或以后的版本用 row_number() over (partition by xxx order by kkkk) 就方便多得多了.以下是该项目涉及到的SQL代码.

Create table #AllData
(
RID int identity(1,1),
CDate varchar(10) not null,
ConsumeTime varchar(5) not null,
CardNo varchar(10),
Suser varchar(7),
Name varchar(20),
Dept varchar(40),
ConsumeSum money,
Balance money,
ByWho varchar(10)
)
insert into #AllData 
(CDate,ConsumeTime,CardNo,Suser,Name,Dept,ConsumeSum,Balance,ByWho)
select
convert(varchar(10),FEE.消费时间,121),
convert(varchar(5),FEE.消费时间,108),FEE.卡号,FEE.工号,SUSER.姓名,SUSER.部门,FEE.消费金额,FEE.卡上余额,FEE.经手人
FROM 收费表 FEE with (nolock),发行表 SUSER with (nolock)
WHERE FEE.卡号=SUSER.卡号 AND
FEE.工号=SUSER.工号    AND
(SUSER.工号 between @SUSER1 and @SUSER2    ) AND
(FEE.消费时间 BETWEEN @dt1  AND @dt2)    AND
FEE.消费金额<>0
ORDER BY SUSER.部门,SUSER.工号,FEE.消费时间

-- 以下这里是sql2000实现分组行号的办法,请记住
-- 
select (select count(*) from #AllData as b where a.CDate=b.CDate and a.RID>=b.RID) AS GRID, a.*
from #AllData as a

然后就是在SSRS中设计此报表,SSRS其实还有很多高级功能可以丰富报表,体高用户体验. 在这里就不在赘述,现帖出设计图案.以下箭头所指地方需要多多留意.

只要按这种形式设计相应字段栏位即可. 这里设置单笔超过10块,日消费超过12块则改变数字显示颜色.下图是效果图.

然后可以设计订阅此报表,每天定时运行发送到相应的人的邮箱中去.

 

配置图,以及发到邮箱结果.

 

转载于:https://www.cnblogs.com/Geton/p/3798273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值