java 两个数错位相加_多层分组报表中数据错位的问题

分组报表,是所有报表当中最普通,最常见的报表类型,也是所有报表工具都支持的一种报表格式。

分组报表制作方式是把报表划分为条带状,用户根据一个数据绑定向导指定分组,汇总字段,生成标准的分组报表。

多层分组,是指在分组中再进行细化分组,我们来看下面一个例子:

imgServlet?fileID=58ed4a6f-e969-4b97-9f5d-2fbf0c02b8ec

在第一层分组下又进行了两层分组,然后再进行数据汇总。

我们看一下sql:

SELECT jn.csfl,jn.xmdm,jn.jncsxm,jn.tjyf,jn.jh,jn.qrcye,jn.qdjgl,jn.qygzgl,jn.qrhdl,jn.qxtxl,jn.hrcye,jn.hdjgl,jn.hygzgl,jn.hrhdl,jn.hxtxl,jn.ljjdl,jn.hdym,jn.qdym,left(jn.cyfs,2) ccc FROM jn WHERE tjyf>=?+”01″ and tjyf<=?+? AND ( jn.xmdm =’1.1′ or jn.xmdm =’1.1s’ or jn.xmdm =’1.5′ or jn.xmdm =’1.30′ or jn.xmdm =’1.31′ or jn.xmdm =’3.14′ or jn.xmdm =’4.2′ or jn.xmdm =’4.3′ or jn.xmdm =’4.1′ or jn.xmdm =’1.11′ or jn.xmdm =’1.12′ or jn.xmdm =’1.24′ or jn.xmdm =’3.1′ or jn.xmdm =’2.4′ or jn.xmdm =’1.13′ or jn.xmdm =’1.14′ or jn.xmdm =’3.2′ or jn.xmdm =’2.6′ or jn.xmdm =’5′ or jn.xmdm =’1.15′ or jn.xmdm =’1.16′ or jn.xmdm =’1.17′ or jn.xmdm =’1.3′ or jn.xmdm=’1.29′) and (csfl=’1′ or csfl=’2′ or csfl=’3′ or csfl=’4′ or csfl=’5′ or csfl=’6′ or csfl=’7′)

我们对参数进行了绑定:

imgServlet?fileID=60559dec-428c-4d1b-91b5-7655d9e2e01f

我们在预览中,发现当参数不变的情况下,会出现奇怪的现象:

imgServlet?fileID=163742bf-b398-43b3-ba68-4e90789b10be

再运行一次,会发现:

imgServlet?fileID=ce247e31-3421-4d7b-ab8a-b8dd1aca61ee

刚才还是两层分组,现在就变成一层了。

我们看一下表达式:

imgServlet?fileID=39c87efb-e503-4638-b564-126499e01642

从表达式上我们看到,这是多层分组并进行了默认排序。这一点是没有错误的,那问题就出在了sql上:

SELECT jn.csfl,jn.xmdm,jn.jncsxm,jn.tjyf,jn.jh,jn.qrcye,jn.qdjgl,jn.qygzgl,jn.qrhdl,jn.qxtxl,jn.hrcye,jn.hdjgl,jn.hygzgl,jn.hrhdl,jn.hxtxl,jn.ljjdl,jn.hdym,jn.qdym,left(jn.cyfs,2) ccc FROM jn WHERE tjyf>=?+”01″ and tjyf<=?+? AND ( jn.xmdm =’1.1′ or jn.xmdm =’1.1s’ or jn.xmdm =’1.5′ or jn.xmdm =’1.30′ or jn.xmdm =’1.31′ or jn.xmdm =’3.14′ or jn.xmdm =’4.2′ or jn.xmdm =’4.3′ or jn.xmdm =’4.1′ or jn.xmdm =’1.11′ or jn.xmdm =’1.12′ or jn.xmdm =’1.24′ or jn.xmdm =’3.1′ or jn.xmdm =’2.4′ or jn.xmdm =’1.13′ or jn.xmdm =’1.14′ or jn.xmdm =’3.2′ or jn.xmdm =’2.6′ or jn.xmdm =’5′ or jn.xmdm =’1.15′ or jn.xmdm =’1.16′ or jn.xmdm =’1.17′ or jn.xmdm =’1.3′ or jn.xmdm=’1.29′) and (csfl=’1′ or csfl=’2′ or csfl=’3′ or csfl=’4′ or csfl=’5′ or csfl=’6′ or csfl=’7′)

在sql中我们并没有进行排序,这就有可能会导致分组字段在从数据库取出来后再排序导致出错的可能。

我们在sql中加上排序:

SELECT jn.csfl,jn.xmdm,jn.jncsxm,jn.tjyf,jn.jh,jn.qrcye,jn.qdjgl,jn.qygzgl,jn.qrhdl,jn.qxtxl,jn.hrcye,jn.hdjgl,jn.hygzgl,jn.hrhdl,jn.hxtxl,jn.ljjdl,jn.hdym,jn.qdym,left(jn.cyfs,2) ccc FROM jn WHERE tjyf>=?+”01″ and tjyf<=?+? AND ( jn.xmdm =’1.1′ or jn.xmdm =’1.1s’ or jn.xmdm =’1.5′ or jn.xmdm =’1.30′ or jn.xmdm =’1.31′ or jn.xmdm =’3.14′ or jn.xmdm =’4.2′ or jn.xmdm =’4.3′ or jn.xmdm =’4.1′ or jn.xmdm =’1.11′ or jn.xmdm =’1.12′ or jn.xmdm =’1.24′ or jn.xmdm =’3.1′ or jn.xmdm =’2.4′ or jn.xmdm =’1.13′ or jn.xmdm =’1.14′ or jn.xmdm =’3.2′ or jn.xmdm =’2.6′ or jn.xmdm =’5′ or jn.xmdm =’1.15′ or jn.xmdm =’1.16′ or jn.xmdm =’1.17′ or jn.xmdm =’1.3′ or jn.xmdm=’1.29′) and (csfl=’1′ or csfl=’2′ or csfl=’3′ or csfl=’4′ or csfl=’5′ or csfl=’6′ or csfl=’7′) order by jn.csfl,ccc,jn.xmdm

这时我们无论运行多少次都不会出现数据错位的情况了,在今后制作多层分组的报表时,要特别注意这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值