报表开发中通用group_concat函数的实现方法

使用Jasper或BIRT等报表工具时,常会碰到一些非常规的统计,用报表工具本身或SQL都难以处理,如在MSSQL/Oracle中,想展现类似group_concat函数计算结果的报表。

集算器具有结构化强计算引擎,集成简单,可以协助报表工具方便地实现此类需求。下面以MSSQL为例,来说明通用group_concat函数的实现过程。

MSSQL的表Table1有四个字段,字段Col1、Col2、Col3是分组字段,Col4是汇总字段,部分数据如下:

报表工具需要的数据源如下:

集算器代码:

A1=mssqlDB.query("select * fromtable1 where Col1 in"+arg)

这句代码执行SQL,从数据库中取出数据。其中arg是来自报表的参数,比如(10,20)。A1的计算结果如下:

A2=A1.group(Col1,Col2,Col3;~.(Col4)[email protected]():Col4)

这句代码将A1按照Col1、Col2、Col3分组,并将每组数据中的Col4以逗号拼接在一起。代码中的~表示每组数据,比如第一组有三条记录。~.(Col4)表示取出每组数据中的Col4字段,比如第一组就是集合[A12G3 , K78DE , MAT12]。函数string可将集合中的成员拼接成一个字符串,默认分隔符是逗号,选项@d表示不给成员加引号,因此表达式[A12G3
, K78DE , MAT12][email protected]()等于” A12G3 ,K78DE , MAT12”。表达式“:Col4”表示将前面的计算结果重命名为Col4。

A3就是本案例的最终计算结果,如下:

A3:result A2

这句代码将A2中的数据返回给报表工具。

集算器对外提供JDBC接口,报表工具会将集算器识别为普通数据库,集成方案请参考相关文档。

接下来以JasperReport为例设计报表,表样如下:

预览后可以看到报表结果:

需要注意的是,报表调用集算器的方法和调用存储过程一样,比如将本脚本保存为group_concat.dfx,则在的JasperReport的SQL设计器中可以用group_concat $P{arg}来调用。

时间: 2024-11-06 08:20:39

报表开发中通用group_concat函数的实现方法的相关文章

mysql中的group_concat函数的用法

1 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 2 MySQL中group_concat函数 3 完整的语法如下: 4 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 5 基本查询 6 mysql> select * from aa; 7 +------+------+ 8 | id| name | 9 +-

Mysql中关于 group_concat函数详解

group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+---

SQLServer 中实现类似MySQL中的group_concat函数的功能

SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ',' + b FROM #tb WHERE a = t.a FOR xml path('')), 1, 1, '' )AS b from  # tb AS t GROUP BY a; 先对a列进行分组,对分组中的b以Xml形式输出,再使用stuff将开关多出的,删掉. 具体实现参考:http:/

Android实际开发中的bug总结与解决方法(一)

                                                                             Android实际开发中的bug总结与解决方法(一) Android开发中有很多bug,我们是完全可以在线下避免的,不要等到线上报的BUG的再去修复.下面是我在实际开发中遇到过的bug和解决方法. BUG 1: java.lang.RuntimeException: Unable to start activity ComponentInfo

java开发中遇到的问题及解决方法(持续更新)

摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不想动用Eclipse大家伙,只能自己动手编写脚本进行Java代码的编译和运行,期间遇到的一些问题,记录下来供自己和大家参考.1)软件包不存在/软件包 javax.jms 不存在    这是由于javac编译时找不到javax.jms所在的软件包,因此将

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值

MVC自我学起之MVCMusic开发中遇到问题:musicstore edit方法出错的原因和解决方法

错误提示: 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能被修改或删除.刷新 ObjectStateManager 项. 解决案: 1.在view中或model中增加隐藏id 1.1 修改model [HiddenInput()]public int AlbumId { get; set; } 1.2在视图中增加:(一般 若是用自动新建的curd中会自带) 加@Html.HiddenFor(model => model.AlbumId) 2.得到id也有两种方法一种是修改m

Android应用开发中三种常见的图片压缩方法

Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里

举例详解Python中的split()函数的使用方法

这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)os.path.split():按照路径将文件名和路径分割开 一.函数说明1.split()函数语法:str.