Oracle Apex 22.21:修改柱状图源查询实现按日统计订单数
Oracle Apex 22.21 柱状图按日期统计订单数问题解决
需求与已完成操作
需求:在Oracle Apex 22.21的柱状图中,通过日期选择器(P5_DATE_FROM、P5_DATE_TO)展示指定日期范围内每日的订单数量。
已完成操作:
- 创建日期选择器项P5_DATE_FROM和P5_DATE_TO;
- 将图表系列源类型改为SQL Query,原查询代码如下:
select ORDER_ID, ORDER_NUMBER, ORDER_DATE, STORE_ID, FULL_NAME, EMAIL, CITY, STATE, ZIP_CODE, CREDIT_CARD, ORDER_ITEMS, APEX$SYNC_STEP_STATIC_ID, APEX$ROW_SYNC_TIMESTAMP from ORDERS_LOCAL where ORDER_DATE between TO_DATE(:P5_DATE_FROM,'YYYY-MM-DD') and TO_DATE(:P5_DATE_TO,'YYYY-MM-DD')
- 在Source中添加需提交的页面项P5_DATE_FROM、P5_DATE_TO。
遇到的问题
- 配置Column Mapping时,将Value设为ORDER_DATE报错:
Ajax call returned server error ORA-01403: no data found for CHART Count Orders by Date. - 选择其他字段则展示字段实际值而非订单数;
- 修改查询为统计分组后出现语法错误,添加同步字段后又报GROUP BY错误。
解决方案
1. 修正SQL查询语句
柱状图需要的是日期维度和对应日期的订单统计数,因此查询必须按日期分组并做计数统计,同时移除无关的同步字段(这类字段不属于统计维度,会导致GROUP BY错误)。正确的查询语句如下:
-- 按日期截断到天,统计每日订单数量 select TRUNC(ORDER_DATE) as ORDER_DAY, COUNT(ORDER_ID) as ORDER_COUNT from ORDERS_LOCAL where ORDER_DATE between TO_DATE(:P5_DATE_FROM,'YYYY-MM-DD') and TO_DATE(:P5_DATE_TO,'YYYY-MM-DD') group by TRUNC(ORDER_DATE) order by ORDER_DAY
2. 配置图表Column Mapping
在柱状图的Column Mapping设置中:
- Label选择ORDER_DAY(作为X轴的日期标签)
- Value选择ORDER_COUNT(作为Y轴的订单数量值)
3. 常见问题排查
- ORA-01403无数据报错:检查日期选择器的输出格式是否与查询中
TO_DATE的格式(YYYY-MM-DD)一致;同时确认所选日期范围内存在订单数据。 - GROUP BY错误:统计查询中,所有未使用聚合函数的字段必须出现在GROUP BY子句中,原查询中的同步字段不属于统计维度,需直接移除。
- 展示字段实际值而非订单数:原查询仅返回原始订单数据,未做计数统计,图表无法自动计算数量,必须通过分组统计得到订单数字段。
内容的提问来源于stack exchange,提问作者ckp7blessed
相关产品推荐
相关产品推荐

