如何计算具有相同ID的行的总和?

时间:2019-01-13 16:37:32

标签: oracle plsql

我需要创建一个返回产品最终收益的函数。我的问题是,对于每个需要花费超过10天才能处理的PRODUCT_ID,我都必须在产品价格上加上(天* 0.0001)。许多ORDER_ID具有不同的PRODUCT_ID。我想不出在同一函数中执行此操作的方法,我必须在哪里添加乘法?数据库模式就是这样

enter image description here

我尝试了双循环,并尝试了SUM,但是这些都不起作用。

CREATE OR REPLACE FUNCTION get_gain(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;

    Cursor cur1 IS
    SELECT SUM(PRICE) AS "Total PRICE"
    FROM ORDERS
    WHERE ORDER_ID=orderID;
    Cursor cur2 IS
    SELECT SUM(COST) AS "Total COST"
    FROM ORDERS
    WHERE ORDER_ID=orderID;

BEGIN
   OPEN cur1;
   FETCH cur1 INTO total_price;
   CLOSE cur1;
   OPEN cur2;
   FETCH cur2 INTO total_cost;
   CLOSE cur2;
   gain := total_price - total_cost;
   RETURN gain;

END;

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法来构造您的查询。我相信您将不需要任何功能

SELECT
  ORDER_ID,
  ...
  CASE WHEN DAYS_TO_PROCESS > 10 THEN
     PRICE + DAYS_TO_PROCESS * 0.0001 
  ELSE
     PRICE
  END AS PRICE
FROM table1
WHERE ...

目前尚不清楚您要实现的目标。请提供更多详细信息。

以下是更新产品价格的功能示例

CREATE OR REPLACE FUNCTION UpdatePrice(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;
BEGIN
  UPDATE table1 
  SET PRICE = 
    CASE WHEN DAYS_TO_PROCESS > 10 THEN
       PRICE + DAYS_TO_PROCESS * 0.0001 
    ELSE
       PRICE
    END
  WHERE ORDER_ID = p_ORDER_ID;
END;