Plsql 将对应id字段的列值相乘

Plsql 将对应id字段的列值相乘,plsql,oracle11g,Plsql,Oracle11g,我有一个包含id及其各自值的表。我必须乘以每个id对应的值 CREATE TABLE mult_tbl( id NUMBER, val number ); insert all into mult_tbl values (1,2) into mult_tbl values (1,3) into mult_tbl values (1,5) into mult_tbl values (2,2) into mult_tbl values (2,0) INTO m

我有一个包含id及其各自值的表。我必须乘以每个id对应的值

 CREATE TABLE mult_tbl(
  id NUMBER,
  val number
 );

 insert all
  into mult_tbl values (1,2)
  into mult_tbl values (1,3)
  into mult_tbl values (1,5)
  into mult_tbl values (2,2)
  into mult_tbl values (2,0)
  INTO mult_tbl VALUES (1,-1)
  into mult_tbl values (4,10)
  into mult_tbl values (4,3)
select * from dual;
如何计算id的每个唯一值的行乘法。 我试图得到显示id的输出以及相乘后各自的结果 相应的值

对于id 1,o/p-30

对于id 2,o/p 0

对于id 4,o/p 30

我正在尝试实现游标,但没有任何想法。

也许这会有所帮助

select id,
  case
    when zer=1 then 0
    when neg=1 then -prd
    else prd
  end prd
from (
  select id, exp(sum(ln(abs(decode(val,0,1,val))))) prd
  from mult_tbl 
  group by id
) left join (
  select id,
  count(decode(val,0,val)) zer,
  mod(count(nullif(val,0)),2) neg
  from mult_tbl where val<=0
  group by id
) using(id)