如何在Jasper Studio查询编辑器中对Big Decimal数值四舍五入?
问题
我为Oracle APEX项目创建了一份报表,使用的查询语句如下:
select a.ID_NO, b.HOSPITAL_NAME_E as "Hospital", c.TESTNAME as "Test", a.APPROVED_BY, to_char(a.APPROVED_DATE,'DD-MM-YYYY' ) as "Date", a.RESULT, d.MACHINE_NAME as "Machine", p.PROGRAM_NAME as "Program", s.SAMPLE_NAME_E as "Sample", a.MEAN, a.SD, a.SDI, LOW_LIMIT as "Low", HIGH_LIMIT as "High", pe.PERF_DESC_E as "Performance", u.DESC_E as "Unit", VALIDATED , co.COMPANY_NAME_E as "Company" from hajj_qc_results a , hospitals b , hajj_program_tests c , machines d , hajj_programs p , hajj_samples s , HAJJ_QC_PERFORMANCE pe , lab_service_unit u , hajj_company_machines mc , companies co where validated = 2 and a.PROGRAM_ID <> 6 and a.HOSPITAL_NO = b.ID and a.TESTID = c.TESTID and a.MACHINE_ID = d.MACHINE_ID and a.PROGRAM_ID = p.ID and a.SAMPLE_ID = s.ID and a.PERF_ID = pe.PERF_ID and a.UNITID = u.ID and a.MACHINE_ID = mc.MACHINE_ID and mc.COMPANY_ID = co.ID and a.result is not null and a.HOSPITAL_NO = $P{hospital_no}
我需要对查询结果中的SD和SDI字段数值进行四舍五入,尝试使用Oracle的ROUND函数:
ROUND((a.SD),2), ROUND((a.SDI),2),
但在Jasper Studio查询编辑器中出现“multiple markers at this line”的编译错误,请问该如何实现数值的四舍五入?
解决方案
出现这个错误的核心原因是修改时遗漏了字段别名,或者语法格式不符合Jasper Studio的解析要求。以下是正确的实现方式:
- 为处理后的字段添加别名
Oracle查询中,对字段使用函数处理后,必须显式指定别名,否则Jasper Studio无法正确识别字段。直接保留原字段名作为别名即可:
ROUND(a.SD, 2) as "SD", ROUND(a.SDI, 2) as "SDI",
注:不需要额外嵌套括号包裹a.SD,简化写法即可。
- 替换原查询对应行
将原查询中的a.SD,和a.SDI,替换为上面的语句,修改后的完整查询如下:
select a.ID_NO, b.HOSPITAL_NAME_E as "Hospital", c.TESTNAME as "Test", a.APPROVED_BY, to_char(a.APPROVED_DATE,'DD-MM-YYYY' ) as "Date", a.RESULT, d.MACHINE_NAME as "Machine", p.PROGRAM_NAME as "Program", s.SAMPLE_NAME_E as "Sample", a.MEAN, ROUND(a.SD, 2) as "SD", ROUND(a.SDI, 2) as "SDI", LOW_LIMIT as "Low", HIGH_LIMIT as "High", pe.PERF_DESC_E as "Performance", u.DESC_E as "Unit", VALIDATED , co.COMPANY_NAME_E as "Company" from hajj_qc_results a , hospitals b , hajj_program_tests c , machines d , hajj_programs p , hajj_samples s , HAJJ_QC_PERFORMANCE pe , lab_service_unit u , hajj_company_machines mc , companies co where validated = 2 and a.PROGRAM_ID <> 6 and a.HOSPITAL_NO = b.ID and a.TESTID = c.TESTID and a.MACHINE_ID = d.MACHINE_ID and a.PROGRAM_ID = p.ID and a.SAMPLE_ID = s.ID and a.PERF_ID = pe.PERF_ID and a.UNITID = u.ID and a.MACHINE_ID = mc.MACHINE_ID and mc.COMPANY_ID = co.ID and a.result is not null and a.HOSPITAL_NO = $P{hospital_no}
- 额外检查项
- 确认
a.SD和a.SDI是数值类型字段,若为字符类型需先转换:ROUND(TO_NUMBER(a.SD), 2) as "SD" - 保证Jasper Studio报表的字段映射与修改后的查询字段名一致(此处别名未变,无需调整报表字段)
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

