ReportingServies——SQLServer报表开发综合实例

ReportingServies——SQLServer报表开发综合实例上一篇:ReportingServies报表开发实例教程如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中就是使用的sqlserver2012。使用此工具进行报表开发,将会十分快速而且方便。这里我通过一个综合实例来演示它的使用技

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

文章目录

ReportingServies报表开发实例教程

ReportingServies——SQLServer报表开发综合实例

如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具

ReportingServies——SQLServer报表开发综合实例

不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中就是使用的sqlserver2012

使用此工具进行报表开发,将会十分快速而且方便。这里我通过一个综合实例来演示它的使用技巧,可以毫不夸张的说,如果你能使用此工具把这个Demo做出来,那么工作中遇到的80%报表,你都能够使用此工具进行开发了。

先来看下我们要实现的效果:

ReportingServies——SQLServer报表开发综合实例

报表中使用到的表及字段:

--table 用水水量:hx_t_waterusedamount
--字段 开户信息:hx_fcustomerandmeterrelaid 主键:hx_t_WaterUsedAmountId  水表:hx_fmeterid 区段:hx_fzone 实用水量:hx_famount 
--估水原因:hx_festimateamountreason  结算水量:hx_fpayamount
--抄表类型hx_frecordtype (估水:,000,001 未抄见:100,000,002 正常:100,000,000 预付费卡表估水:100,000,003) 
--水量状态:hx_fstate(计划:100,000,000,已录入水量:100,000,001,等待录入金额:100,000,002,已生成应收:100,000,006,等待审核:100,000,004) 
<span style="font-family:宋体;">--</span>本次抄表止度:hx_freading
--用水年份:hx_fyear  用水月份:hx_fmonth 次:hx_FTimes 
--本次抄表时间:hx_frecorddate  预计水费:hx_fprepayment 预计代收费:hx_fpreproxypayment

--table 用水类别hx_t_watercategory
--field 统计一类:hx_fstatcategoryoneid 主键:hx_t_watercategoryid 名称:hx_fname

--table 用水性质hx_t_waterproperty
--field 主键:hx_t_waterpropertyid 用水类别:hx_fwatercategoryid

--table 抄表班组归属hx_t_teamattribution
--字段主键:hx_t_teamattributionid 抄表班组信息:hx_fteamid 征费所信息:hx_flevyinstituteid

好了,现在正式开始

从效果图上面可以看出,此报表,我们使用到了两张表来展示,而且这里是使用到了两个数据集,但是他们的查询条件是一致的。

我们先来看上面那张表的展示

 ReportingServies——SQLServer报表开发综合实例

我们来看SQL

declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()

declare @BusinessunitId uniqueidentifier --征费所
--set @BusinessunitId='6A2537DD-B87A-E411-93FE-002590622897' ----第十五收费所
DECLARE @TeamId uniqueidentifier --抄表班组
--SET @TeamId='18ACBD81-5B45-E411-9402-6CAE8B22702D' --第十五收费所(零散查表组)
DECLARE @StarDate datetime
DECLARE @EndDate datetime
SET @StarDate =  convert(datetime,'2015-01-15 00:00:00',20)
SET @EndDate = convert(datetime,'2015-01-25 23:59:59',20)
DECLARE @sHMS nvarchar(10)
DECLARE @eHMS nvarchar(10)
SET @sHMS='00:00:00';
SET @eHMS='23:59:59';
DECLARE @ZoneNO varchar(30)

-----------------SQL正文----------------------------------------------------------执行时间:
DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)
DECLARE @StartDateTime datetime,@EndDateTime datetime
SET @strSDate=CONVERT(varchar, @StarDate, 23)+' '+@sHMS
SET @strEDate=CONVERT(varchar, @EndDate, 23)+' '+@eHMS
SET @StartDateTime=convert(datetime,@strSDate,20)
SET @EndDateTime=convert(datetime,@strEDate,20)
-------------------------------------上面的表-------------------------------------------------
select 
1 WaterMeterCount, --表数
w.hx_fpayamount, --水量
w.hx_fprepayment,--预计水费
w.hx_fpreproxypayment,--预计代收费
c.hx_fname --用水类别
 from 
hx_t_waterusedamount w --水量
INNER JOIN hx_t_teamattribution n --抄表班组归属
    ON w.OwningTeam=n.hx_fteamid
AND isnull(w.hx_fzone,'') = isnull(isnull(@ZoneNO,w.hx_fzone),'') 
AND isnull(w.OwningTeam,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@TeamId,w.OwningTeam),'00000000-0000-0000-0000-000000000000') 
AND w.hx_fpayamount>0 --结算水量
AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime 
AND isnull(n.hx_flevyinstituteid,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),
'00000000-0000-0000-0000-000000000000') 
LEFT JOIN hx_t_waterproperty p --用水性质
on w.hx_FWaterPropertyID=p.hx_t_WaterPropertyId
LEFT JOIN hx_t_watercategory c --用水类别
on p.hx_FWaterCategoryID=c.hx_t_WaterCategoryId

-----------------END----------------------------------------------------------------------------
select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '用时/毫秒'

执行结果如下:

ReportingServies——SQLServer报表开发综合实例

可以看出这是十分常见的纵表变横表了,如果使用纯sql来实现转换效果的话,就有得写一连串复杂的sql语句了,但是通过使用此报表开发工具,我们可以轻而易举的将其纵向显示结果变为横向显示结果。

操作步骤如下:

1、打开此报表开发工具,文件——新建——项目

ReportingServies——SQLServer报表开发综合实例

2、右键单击右侧解决方案中的报表目录,然后一直下一步,

ReportingServies——SQLServer报表开发综合实例

ReportingServies——SQLServer报表开发综合实例

ReportingServies——SQLServer报表开发综合实例ReportingServies——SQLServer报表开发综合实例

但是考虑到矩阵的界面配置甚为反锁,这里我们先选择表格吧,然后一直点击下一步,直到完成

ReportingServies——SQLServer报表开发综合实例

1、把界面上面的表格删掉,然后从左侧工具栏拖入一个矩阵,

ReportingServies——SQLServer报表开发综合实例

选中“数据”单元格,右键——插入行——组内部——下方,添加4行,然后右键——插入列——组外部(因为要统计合计)

ReportingServies——SQLServer报表开发综合实例

列这个地方,选择hx_fname这个字段,从sql中可以看到hx_fname这个字段是我们需要转换为横表展示的字段,然后数据这里,选中要聚合的字段。

右侧报表数据,

ReportingServies——SQLServer报表开发综合实例

这里自动生成了许多参数,这些参数是因为我们刚才添加的SQL语句里面用到了,注意看名称,和我们刚才声明的SQL语句是一样的。

选中属性,右键单击,可以查看参数的配置信息

这些东西大家多去点一下,自然就熟悉了,涉及的东西太多了,我一下子也说不完。

这里有两个参数是有级联关系的,我就先说下

ReportingServies——SQLServer报表开发综合实例

我们来看下这两个参数的配置,这两个参数都是以下拉框的形式显示的,而且值都是取自数据库中。

先看参数:BusinessunitId

ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例

这个数据集哪里来的?我们可以自己添加

ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例

再来看下参数:TeamId

ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例

右键单击空白处——创建占位符

ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例
ReportingServies——SQLServer报表开发综合实例

批量修改可以直接通过这里进行修改,

否则,只能一个文本框一个文本框属性进行修改了。#代表千分位显示,后面的数字代码保留小数位数,0代表整数

数量/水量:#,0

单价:0.00

金额:#,0.00

报表中下面那个程序集的操作类似,这里就不多说了,东西太多了。

ReportingServies——SQLServer报表开发综合实例

SQL如下:

----------------SQL正文----------------------------------------------------------执行时间:
DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)
DECLARE @StartDateTime datetime,@EndDateTime datetime
SET @strSDate=CONVERT(varchar, @StarDate, 23)+' '+@sHMS
SET @strEDate=CONVERT(varchar, @EndDate, 23)+' '+@eHMS
SET @StartDateTime=convert(datetime,@strSDate,20)
SET @EndDateTime=convert(datetime,@strEDate,20)
----------------------------------下面的表------------------------------------------------------
if object_id('tempdb..#t_estimateamountreason') is not null drop table #t_estimateamountreason

select * into #t_estimateamountreason from   
(select distinct t1.Label,t2.Value from MetadataSchema.LocalizedLabel t1   
inner join MetadataSchema.AttributePicklistValue t2  
 on t1.ObjectId=t2.AttributePicklistValueId inner join MetadataSchema.OptionSet t3 on t2.OptionSetId=t3.OptionSetId   
 where t3.Name='hx_estimateamountreason_values' and t1.ObjectColumnName='DisplayName' and t1.LanguageId=2052) t
--select * from #t_estimateamountreason 
 
select
1 MeterCounts, --水表块数
isnull(e.Label,'其它') ReasonName  --估水原因名称
from hx_t_waterusedamount w --水量 
INNER JOIN hx_t_teamattribution n  --抄表班组归属
    ON w.OwningTeam=n.hx_fteamid 
AND isnull(w.hx_fzone,'') = isnull(isnull(@ZoneNO,w.hx_fzone),'') 
AND isnull(w.OwningTeam,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@TeamId,w.OwningTeam),'00000000-0000-0000-0000-000000000000') 
AND w.hx_fpayamount=0 --结算水量
AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime 
AND isnull(n.hx_flevyinstituteid,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),
'00000000-0000-0000-0000-000000000000')  
LEFT JOIN #t_estimateamountreason e --估水原因 
    ON e.Value=w.hx_festimateamountreason   
    
UNION ALL  
select 1 MeterCounts,e.Label ReasonName from #t_estimateamountreason e 
  
 if object_id('tempdb..#t_estimateamountreason') is not null drop table #t_estimateamountreason
----------------END----------------------------------------------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179539.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu安装Nginx_ubuntu gedit命令

    Ubuntu安装Nginx_ubuntu gedit命令目录ubuntu安装nginx 一、apt-get安装nginx 二、下载nginx包安装 ubuntu安装nginx目前支持两种安装方式,一种是apt-get的方式,另一种是根据包安装的方式为方便我统一使用root用户一、apt-get安装nginx#切换至root用户sudosurootapt-getinstallnginx查看nginx是否安装成功nginx-v1启动nginxservicenginxstart..

    2022年9月19日
    0
  • Mysql8.0安装步骤「建议收藏」

    第一步:下载安装包MYSQL官方下载地址:官方下载这里第一项是在线安装,第二项是离线包安装,我选择的是第二项(不用管你电脑是多少位的操作系统),因为:Note:MySQLInstalleris32bit,butwillinstallboth32bitand64bitbinaries.不用注册、登录,直接选择左下按钮下载:Nothanks,ju…

    2022年4月14日
    53
  • c++的发展方向

    c++的发展方向我现在是一名在校大学生,在学校期间自学C++有两年的时间了,看过C++Primer,stl,insideC++model(侯捷翻译的那本),com本质论等… 在学习C++的过程中感觉C++语言本身的确很强大,而且随着学习的深入,我逐渐感到要想在短时间了解这门语言的本质几乎是不可能的.因为我也学习过javaSE的一些东西,感觉就java和C#来说,语言本身不难,不过在底层调用方面有时候就

    2022年4月30日
    65
  • C++洗牌算法「建议收藏」

    1、使用标准库中的random_shuffle()函数实现很简单,代码如下:int main() {     vectorint> s_stl;     for (int i=0; i    random_shuffle(s_stl.begin(),s_stl.end());     cout “使用C++算法库:”;     for (vectorint>::iterator it=s_st

    2022年4月7日
    78
  • mysql8和mariadb_mariadb迁移到mysql

    mysql8和mariadb_mariadb迁移到mysqlMariaDB为可替代MySQL的增强版本,但在已安装了MySQL的情况下同时也能安装MariaDB.(这是有意义的,例如你想从一个数据库/应用迁MariaDB为可替代MySQL的增强版本,但在已安装了MySQL的情况下同时也能安装MariaDB.(这是有意义的,例如你想从一个数据库/应用迁移到另一个数据库/应用中.)以下是在已安装MySQL的情况下,安装MariaDB的主要步骤.下载…

    2022年10月24日
    0
  • 20佳应用大图片背景的优秀站点作品

    20佳应用大图片背景的优秀站点作品

    2022年1月24日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号