答案 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>