一句话从 MySQL 取出重复行
按该字段分组后,组内行数大于 1 的就是重复行。大于 1 要写入 having;但仅用 group+having 只能得到汇总值,不是明细数据,要得到明细还要用子查询重复遍历:select *from Awhere g in (select g
如何将数据库中的数据导成 excel 文件
这个要看下具体格式,如果只是将数据库中的明细数据逐条导出到 excel 中的话,这个直接使用开源的 poi 就行,具体可以直接百度下,但是这种实际上没多大意义,大多数的需求是要求按照特定的格式导出,比如订单信息表要求每个订单号的数据导出到一个 sheet 里,这样的话通常建议采用报表工具做,比如我这边之前用过的润乾报表,主要原因:一:以特定格式导出时,用报表工具设置格式更为方便,尤其是样式比较复杂
WEB 报表如何做到不需要预览就直接打印
在浏览器中打印一般总要弹出个对话框预览再确认,但有时我们希望静默打印(点击打印后不再预览,直接打印),或者点击打印时能够连续打印多张表格。这需要要写些 JS 或者页面代码来实现,比如要通过代码画表格,然后通过 js 等去实现打印,这样实现有点麻烦,不过打印的内容常常都是报表,就可以采用报表工具来实现了。比如:一:用报表工具设置格式会更加简单灵活二:报表工具通常带有直接打印的功能,直接调用相应的功能
一句话实现MySQL库中的重叠分组
枚举多个条件进行分组时,可能发生重叠,重叠部分仅计入某个组,还是计入所有符合条件的组,这在写 SQL 时,写法大不相同。只计入第一个符合条件的组时,可以通过 case when 转换成常规分组,例如:select (case when age&
怎样实现动态列报表,也就是列数不固定的报表?
一般有两种实现方式:1. 通过报表工具来做如下图这样的,浏览时候选择不同的指标,就可以展现不同的列具体做法参考 动态列报表的制作2 通过 BI 来做,如下图这样,拖拽需要的列到展示区,需要什么拖拽什么就可以,也是动态的具体资料可以参 把 Excel 透视表搬到 WEB 上
怎么实现报表套打
直接在页面上画很难精确,不过大多数报表工具都能支持这一点,过程都差不多:1. 先把单据扫描成图片并处理大小2. 把图片作为报表的背景图,瞄着背景图设计报表3. 微调报表到打印效果没问题详细实现可参考 报表工具实现单据套打
我们报表用了很多存储过程,不好调试,有什么好的存储过程调试工具推荐吗?
存储过程不好调试,无法移植,这是大家的共识,没啥改善空间了。原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。现在大家比较倾向于用 JAVA 硬编码来做复杂计算,但复杂度太高了,对于报表开发来说
用户数据库不给开放存储过程写权限了,以前的报表都是存储过程后面写好的,这可咋办?
那就不能再用存储过程了,得快点找替代方案。原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计用户也是因为这个禁止使用存储过程了。一个方案是:用 JAVA 硬编码来做复杂计算,然后给报表做呈现
公司不让用存储过程了,以后咋做报表?
得快点找替代方案。原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计你们公司也是因为这个禁止使用存储过程了。一个方案是:用 JAVA 硬编码来做复杂计算,然后给报表做呈现;但这种做法的复杂度
一句话实现MySQL库中的有序枚举条件分组
SQL 只有等值分组,枚举分组一般要用 case when 过渡,但又保持不了次序,要保留次序就得 join,比如写成这样:with T2(g,ord) as { select 'firstGroup',1 union all select
很多浏览器都禁用 java 打印了,java 项目还有哪些打印方式
下面举例说明1.Pdf 打印环境要求:浏览器安装 pdf 插件,如 adobe Reader X优点:从服务器端下载 pdf 文件流,可以实现精准套打、批量打印等。缺点: 需要下载 adobe 插件2.Flash 打印环境要求:浏览器支持 flash 插件优点: 打印模式为矢量打印,对浏览器资源要求较低。打印时避免了以往需要下载安装 JDK 的繁琐,客户端可以无需下载 JAVA JDK
怎么做能打印发票的软件?
发票类的难点在于格式上的控制,原来经常用 excel 或者单独编写程序做,现在 web 端展示要求多的话一般就采用专门的报表工具来做了,发票也可以归为单据类,从格式上来分可以有几种:一:明细类格式,报表中有表头、表尾展示一些固定信息,然后数据区域显示明细数据,要求每页显示条数固定,不满一页的话要求补充空行以满足打印时的效果,这种做法可以参考下: 单据类报表的制作二:另外一种就是发票这种格式,难点在
web 端如何像 excel 里的多 sheet 方式呈现数据
Web 端一般来说都是以多 tab 页方式展现,每个 tab 页展示不同的数据,这个要自己通过程序去写的话每个 tab 页都要画表格然后再将多个合成一个页面,这个工作量以及开发难度都会比较大,针对这种需求,建议采用专业的报表工具,比如参考下这个:tab 页形式展现多张报表这样有几个好处:1、每个 tab 下的数据呈现一般是报表格式,使用报表工具去做开发效率会更高。2、报表工具中带有多 sheet
如何在 web 端实现一个有日历的报表
简单要一个日历控件来选择日期查询,可以直接用报表工具自带的控件或者也有一些开源的控件,比如:复杂些的情况,如果是想做万年历日程安排表之类的带数据的报表,比如一个考勤系统,要在日历中的每天上加一个是否出勤的状态,这种再用公共日历控件方式或者自己去写程序就很麻烦,推荐用专业报表工具来实现,可以参考:日历类报表可以这样实现这么做能实现日历和数据库中的数据做绑定,还有一个好处,可以通过一个日期参数的动态传
分库数据如何查询统计
分库后的计算不能直接使用SQL;异构库 SQL 函数不尽相同;JAVA 硬编码实施难度大;即使借助透明网关访问远程数据库,分库性能优化也是头疼问题。一般常规办法:方法1:java硬编码简单的跨库count运算,Java部分代码大概要写成这样:…public Connection getConnection(String drivername,String url, Stri
两行代码轻松让 Java 实现大文本并行计算
简单提高文本读取效率,使用BufferedReader是个不错的选择。速度最快的方法是MappedByteBuffer,但是,相比BufferedReader而言,效果不是非常明显。也就是说,后者虽然快,但也快的有限(不要抱有性能提升几倍的幻想)。对于大文本的读取,性能瓶颈主要在IO,read占时间多是正常的,硬盘本身就不快,读入内存后还要转成对象,都比较耗时间。想要提速应当用并行的办法,用多线程
读 CSV/TXT 的报表怎么做分页查询?
很容易想到的办法是把文本数据灌到 RDB 里,利用数据库分页机制来做,但这样做会对数据库产生很大影响(容量和性能),毕竟要分页查询的数据量不会太小。而且如果 CSV/TXT 数据就是从数据库导出去的,那这种方式基本就行不通了。用 JAVA 硬写也是一种办法,就是比较麻烦,除了要能完成过滤、分组等集合运算,还要考虑异步查询的效率,如果通过行号(要遍历数据)确定每页的查询范围,效率就非常低了;通过字节
报表中怎么把相同值的单元格合并成一个大格
同值合并单元格的情况一般分两种:1、一种是比较简单的情况:对分类或者分类扩展字段进行同值合并处理(如下图所示的效果图:对供应商数据进行同值合并)这种情况大多数报表工具都能直接支持,使用分组功能即可。2、另外一种是比较复杂的情况:此时要合并的不是分组字段,而是对某个单值数据进行动态合并(如下图所示的效果图:把不同月份下的相同钻井状态单元格进行合并)这种情况下很多报表工具就不支持了,自己就做麻烦很多了
一句话实现MySQL库中的按条件变化分组
这种分组的依据是比较上一行字段值,发生某种变化时(如变大超过 10)产生新组。SQL 仅支持等值分组,要想实现这种有序条件分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL 为例,大概经过这么三步:1、得出变化标志字段 flag。通过窗口函数 lag 得到上一行的字段值,满足变化条件(如本行 - 上一行 >10)flag 设为 1,否则为 0;2、累加 flag 字段
报表连 MongoDB,数据量大报表慢,怎么做分页?
MongoDB 没有关系数据库之类的分页机制,要实现分页查询得硬编码,可以通过实现 Pageable 接口来自定义分页类,具体网上有很多介绍。硬编码的缺点是实现太复杂了,也不好维护,对报表开发人员的要求有点高。简单一点的方式是使用支持 MongoDB 分批取数的报表工具,这样就可以解决大数据量查询的问题。可以参考这个: 海量清单与分组报表的实现这里用了两个异步线程,取数线程通过封装好 M