You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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的解析要求。以下是正确的实现方式:

  1. 为处理后的字段添加别名
    Oracle查询中,对字段使用函数处理后,必须显式指定别名,否则Jasper Studio无法正确识别字段。直接保留原字段名作为别名即可:
ROUND(a.SD, 2) as "SD",
ROUND(a.SDI, 2) as "SDI",

注:不需要额外嵌套括号包裹a.SD,简化写法即可。

  1. 替换原查询对应行
    将原查询中的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}
  1. 额外检查项
  • 确认a.SD和a.SDI是数值类型字段,若为字符类型需先转换:ROUND(TO_NUMBER(a.SD), 2) as "SD"
  • 保证Jasper Studio报表的字段映射与修改后的查询字段名一致(此处别名未变,无需调整报表字段)

内容的提问来源于stack exchange,提问作者Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:23:19