首页 文章

在plsql中减去一个到另一个值

提问于
浏览
0

我想(添加p.L_VALUE和p.I_VALUE并使用此结果,减去c.con_value)将一列减去另一列中的另一列,下面的函数编译成功,但减法结果不正确:

函数CF_OP_QTYFormula返回Number是V_QTY数(10);开始选择sum(nvl(p.L_QTY,0))sum(nvl(p.I_QTY,0)) - sum(nvl(c.CON_QTY,0))从raw_purchase p到V_QTY,raw_consum c WHERE p.ITEMCODE = c .ITEMCODE和p.ITEMCODE =:'31 -MAY-2010'和ADD_MONTHS之间的项目编号和p.MONTH_YEAR(:date1,-1); return v_qty;当no_data_found然后返回null时异常;结束;

2 回答

  • 0

    一种解决方案是使用子查询分别计算每个表的列总和:

    function CF_OP_VALFormula return number is
      v_qty number(13);
    begin
      select (select nvl(sum(l_value), 0) + nvl(sum(i_value), 0) from raw_purchase) -
             (select nvl(sum(con_value), 0) from raw_consum)
        into v_qty
        from dual;
    
      return v_qty; 
    end;
    

    注意:您不需要在每一行使用 nvl - 您可以在计算总和后使用它 . 这会加速一些事情 .

  • 0

    对各个表的值求和,然后将它们交叉连接(而不是交叉连接它们,然后求和,这将创建重复值) . 查询后你也错过了一个分号 .

    FUNCTION CF_OP_VALFormula RETURN NUMBER
    IS
      V_QTY NUMBER(13);
    BEGIN
      SELECT p.total - c.total
      INTO   V_QTY
      FROM   ( SELECT sum(nvl(L_VALUE, 0)) + sum(nvl(I_VALUE, 0)) AS total
               FROM   raw_purchase ) p
             CROSS JOIN
             ( SELECT sum(nvl(c.CON_VALUE, 0)) AS total
               FROM   raw_consum ) c;
      RETURN v_qty; 
    END;
    /
    

相关问题