- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何用SQL编写复杂的自定义报表第1期第1期第1期.docx
如何编写复杂的自定义报表一、一般方法的弱点实施过程中难免要根据客户的需要编写自定义报表。如果直接在自定义报表栏写SQL语句总有诸多的不便。比如:1、不能使用某些系统函数(更别说自定义函数了);2、不能使用分情语句;3、对sql语句的字数有限制;所以这种方法只能做一些简单的报表,用户在使用上受到很大的限制。另外:如果使用了表头(或表体)自定义项,而这些自定义项又被其他模块定义了项目名称。那么在过滤窗体,系统就会显示这个用于其他模块的项目名称,这给客户理解报表带来很大的不便。二、使用作业的好处在实施过程中,我一般使用作业来编制复杂报表。基本的思路是这样的:先用过程生成要编制的报表,并且将它插入到tempdb当中去。把过程做成作业,让SQL SERVER在后台定时刷新这个报表。在自定义报表中,只要用最简单的select语句列出报表即可。这样做就可以完全避免【一】中所述的种种缺点,随心所欲地编出各种客户需要的报表。三、复杂报表的实例我在南孚电池曾经编制过一个比较复杂的自定义报表――《新运行记录报表》。它有几个难点是普通自定义报表无法解决的:1、如果班号是“大夜”要将日期减1,否则按原样显示。2、因为数值型的自定义项不够用,用了字符型的自定义项来代替,需要将它们转换为数值型(否则做出的自定义报表无法汇总),另外有些操作员将数值型的数据写成:“8小时”、“2.3万只”需要用一个自定义函数删除多余的汉字。3、自定义项14中的数据是对象代码(即可能是设备代码,也可能是设备的位置代码)报表中要将它转换成设备的名称或位置的名称这样的报表在作业中能够很好的实现,下面就是它的sql语句:use tempdbIF EXISTS(SELECT name FROM sysobjects WHERE name = yxjn AND type = U) DROP TABLE yxjnGOuse ufdata_777_2006SELECT convert(nvarchar(10),case eq_run.cdefine1 when 大夜 then dateadd(day,-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.cDefine8)) AS [实际工时],convert(float,dbo.turnnum(EQ_Run.cDefine9)) AS [计划工时],convert(float,dbo.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-convert(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 PPM into 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如何编写复杂的自定义报表一、一般方法的弱点实施过程中难免要根据客户的需要编写自定义报
文档评论(0)