如何用SQL编写复杂的自定义报表

上传人:宝路 文档编号:2199326 上传时间:2017-07-21 格式:DOCX 页数:2 大小:16.25KB
返回 下载 相关 举报
如何用SQL编写复杂的自定义报表_第1页
第1页 / 共2页
如何用SQL编写复杂的自定义报表_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《如何用SQL编写复杂的自定义报表》由会员分享,可在线阅读,更多相关《如何用SQL编写复杂的自定义报表(2页珍藏版)》请在金锄头文库上搜索。

1、如何编写复杂的自定义报表一、一般方法的弱点实施过程中难免要根据客户的需要编写自定义报表。如果直接在自定义报表栏写 SQL 语句总有诸多的不便。比如:1、 不能使用某些系统函数(更别说自定义函数了);2、 不能使用分情语句;3、 对 sql 语句的字数有限制;所以这种方法只能做一些简单的报表,用户在使用上受到很大的限制。另外:如果使用了表头(或表体)自定义项,而这些自定义项又被其他模块定义了项目名称。那么在过滤窗体,系统就会显示这个用于其他模块的项目名称,这给客户理解报表带来很大的不便。二、使用作业的好处在实施过程中,我一般使用作业来编制复杂报表。基本的思路是这样的:先用过程生成要编制的报表,并

2、且将它插入到 tempdb 当中去。把过程做成作业,让 SQL SERVER 在后台定时刷新这个报表。在自定义报表中,只要用最简单的 select 语句列出报表即可。 这样做就可以完全避免【一】中所述的种种缺点,随心所欲地编出各种客户需要的报表。三、复杂报表的实例我在南孚电池曾经编制过一个比较复杂的自定义报表新运行记录报表。它有几个难点是普通自定义报表无法解决的:1、 如果班号是“大夜”要将日期减1,否则按原样显示。2、 因为数值型的自定义项不够用,用了字符型的自定义项来代替,需要将它们转换为数值型(否则做出的自定义报表无法汇总) ,另外有些操作员将数值型的数据写成:“8 小时” 、 “2.3

3、 万只”需要用一个自定义函数删除多余的汉字。3、 自定义项14 中的数据是对象代码(即可能是设备代码,也可能是设备的位置代码)报表中要将它转换成设备的名称或位置的名称这样的报表在作业中能够很好的实现,下面就是它的 sql 语句:use tempdbIF EXISTS(SELECT name FROM sysobjects WHERE name = yxjnAND type = U)DROP TABLE yxjnGOuse ufdata_777_2006SELECT convert(nvarchar(10),case eq_run.cdefine1 when 大夜 then dateadd(da

4、y,-1,eq_run.dtdate) else eq_run.dtdate end,120) as 日期,EQ_Run.cDefine1 AS 班次,EQ_Run.cDefine2 AS 班号,convert(float,dbo.turnnum(EQ_Run.cDefine3) AS 废品只数,round(EQ_Run.cDefine7,0) AS 速度,convert(float,dbo.turnnum(EQ_Run.cD efine8) AS 实际工时,convert(float,dbo.turnnum(EQ_Run.cDefine9) AS 计划工时,convert(float,dbo

5、.turnnum(EQ_Run.cDefine12) AS 额外产量,EQ_Run.cDefine15 AS 额外工时,round(EQ_Run.cDefine16 ,0)AS 实际产量,EQ_Position.cPName AS 位置名称 , case EQ_Run.cDefine7 when null then null when 0 then null else case convert(float,dbo.turnnum(EQ_Run.cDefine8) when null then null when 0 then null else (EQ_Run.cDefine16-conver

6、t(float,dbo.turnnum(EQ_Run.cDefine12)/EQ_RUN.CDEFINE7/convert(float,dbo.turnnum(EQ_Run.cDefine8)/60 end end as OEE ,case EQ_Run.cDefine16 when null then null when 0 then 0 else convert(float,dbo.turnnum(EQ_Run.cDefine3)/EQ_Run.cDefine16*1000000 end AS PPMinto tempdb.yxjn FROM EQ_Run INNER JOIN (select cpcode,cpname from EQ_Position union all select ceqcode,ceqname from eq_eqdata) as eq_position ON EQ_Run.cdefine14 = EQ_Position.cPCode

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号