对于id.in(1:6:3)这种格式的列的总和

时间:2018-03-27 11:48:57

标签: mysql sql plsql oracle-apex-5.1

我的Ui以这种格式1:6:3返回id所以我想要对与该id相对应的值求和。例如,如果id return = 1:6:3 然后输出将= 100 + 50 + 140 = 290
enter image description here

2 个答案:

答案 0 :(得分:0)

SELECT SUM(value) FROM table WHERE ID IN (1,6,3)怎么样?

答案 1 :(得分:0)

花了一些时间来弄清楚问题是什么。我想我现在得到了它 - 它是关于Apex及其“能力”允许从例如选择列表或穿梭物品中进行多种选择。当您这样做时,那些多个值表示为冒号分隔的字符串。

如果我们假设它是一个选择列表项,则需要两个值:display和return。生成的字符串包含 return 值,这意味着您选择了几个返回值为1,6和3的项目,并且 - 如上所述 - 存储为1:6:3

为了对它们执行某些操作 - 在您的示例中,对表中的值求和 - 您必须先将该字符串解析为行,然后将结果与“真实”表(您发布的图像的表)相连接。我们称之为TEST表;这是:

SQL> create table test (id number, value number, name varchar2(2));

Table created.

SQL> insert into test
  2    select 1, 100, 'a' from dual union
  3    select 2, 110, 'b' from dual union
  4    select 3, 140, 'c' from dual union
  5    select 4, 203, 'd' from dual union
  6    select 5, 230, 'e' from dual union
  7    select 6, 50 , 'f' from dual;

6 rows created.

在Apex中,您可以按如下方式执行:P1_ITEM是包含“1:6:3”字符串的第1页项目:

select sum(t.value) result
from test t join (select regexp_substr(:P1_ITEM, '[^:]+', 1, level) id
                  from dual
                  connect by level <= regexp_count(:P1_ITEM, ':') + 1
                 ) a on a.id = t.id;

只是为了在SQL * Plus中演示它,结果就是:

SQL> select sum(t.value) result
  2  from test t join (select regexp_substr('&&P1_ITEM', '[^:]+', 1, level) id
  3                    from dual
  4                    connect by level <= regexp_count('&&P1_ITEM', ':') + 1
  5                   ) a on a.id = t.id;
Enter value for p1_item: 1:6:3

    RESULT
----------
       290

SQL>