Oracle Apex-按下按钮时更改SQL查询

时间:2018-09-05 20:06:42

标签: oracle oracle-apex-5

是否可以使用按钮更改查询的日期范围(介于date1和date2之间)?基本上,我有一张卡片可以显示总销售额,具体取决于选择了以下哪个按钮:今天本周本月。我只想使用一张卡来显示结果。不是隐藏其他卡的肮脏方式。 这适用于Oracle Apex 5.x

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以创建两个隐藏的项目(假设是第1页)P1_DATE_FROMP1_DATE_TO,并通过按这些按钮(例如,通过动态操作,使用“设置值”)。

然后查询将是

where date_column between :P1_DATE_FROM and :P1_DATE_TO

或者,如果您从3个按钮切换到带有3个单选按钮的单选按钮组(其值为1 =今天,2 =本周,3 =本月),则可以重写

where date_column between 
  case when :P1_RADIO = 1 then trunc(sysdate)
       when :P1_RADIO = 2 then trunc(sysdate) - 7
       when :P1_RADIO = 3 then trunc(sysdate, 'mm')
  end
  --
  and
  --
  case when :P1_RADIO = 1 then trunc(sysdate) + 1
       when :P1_RADIO = 2 then trunc(sysdate) + 1
       when :P1_RADIO = 3 then add_months(trunc(sysdate, 'mm'), 1)
  end

根据您的DATE_COLUMN实际包含的内容以及“今天”或“本周”或“本月”的实际情况,可能需要更改这些值。

答案 1 :(得分:0)

好的,所以我尝试了选择列表而不是单选按钮组。现在这是我当前的查询

TRUNC(SS.EODATE) BETWEEN
    (CASE
        WHEN :P1_CO_SELECT_LIST = 1 THEN TRUNC(SYSDATE) -1
        WHEN :P1_CO_SELECT_LIST = 2 THEN TRUNC(SYSDATE) -8
        WHEN :P1_CO_SELECT_LIST = 3 THEN TRUNC(SYSDATE, 'MM')
        WHEN :P1_CO_SELECT_LIST = 4 THEN TRUNC(SYSDATE, 'YY')
      END)

    AND SYSDATE

这就是我选择的列表静态值

STATIC:Yesterday;1,This Week;2,This Month;3,This Year;4

尝试每行而不使用case语句时,我得到正确的值,所以我想我根据您的评论所做的修改是有效的。

我的问题是刷新我的经典报告(卡片模板)而不刷新整个页面。我在选择列表的Change事件上创建了一个动态操作,然后使用以下设置添加了一个刷新操作...

Action: Refresh
Selection Type: Region
Region: My Report Region

我已将“选择列表”设置为默认值= 3,该值有效。我的报告查询“本月”日期。 现在,当我尝试更改选择列表中的选择时,报告区域会更改数据,但不会更改我需要的预期数据。当我尝试再次更改时,它会重新加载报表区域,但值不会更改。

我确定我在这里遗漏了一些东西。