我有一个查询,其中我从子查询形成的表中提取列的总和。

排队的东西:

select temp.mySum as MySum from (select sum(myColumn) from mySchema.myTable) temp;


但是,当temp.mySum为null时,我不希望MySum为null。相反,当temp.mySum为null时,我希望MySum携带字符串“值不可用”。

因此,我尝试通过以下方式使用合并:

select coalesce(temp.mySum, 'value not available') as MySum from (select sum(myColumn) from mySchema.myTable) temp;


但是上面的查询抛出错误消息:

Message: The data type, length or value of argument "2" of routine "SYSIBM.COALESCE" is incorrect.


该消息是由于合并函数的参数1和2之间的数据类型不兼容,如下面的第一个答案所述。

但是,我直接在Jasper中使用此查询将值发送到Excel工作表报表:

hashmap.put("myQuery", this.myQuery);
JasperReport jasperReportOne = JasperCompileManager.compileReport(this.reportJRXML);
JasperPrint jasperPrintBranchCd = JasperFillManager.fillReport(jasperReportOne , hashmap, con);
jprintList.add(jasperPrintOne);
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jprintList);
exporterXLS.exportReport();


在Excel工作表中,当值不可用时,我将值获取为null。我想在报告中显示“值不可用”。

如何实现呢?

谢谢阅读!

最佳答案

合并的论点必须兼容。如果第一个是数字(可能是mySum)并且第二个是字符串,则不是这种情况。

例如,以下PubLib doco有一个表,指示至少在我使用的DB2(大型机)中,各种类型之间的兼容性-毫无疑问,iSeries和LUW变体也有类似的限制。

您可以尝试使用类似coalesce(temp.mySum, 0)的方法,也可以将第一个参数转换为使用类似char()的字符串。这些方法中的任何一个都应该起作用,因为它们使两个参数兼容。

关于java - DB2和Jasper Reports中的COALESCE问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10583118/

10-11 20:25