创建一个更新查询来计算总成本?

时间:2019-04-07 13:44:06

标签: sql phpmyadmin

因此客户购买产品。一些客户签订了单独产品的合同,并支付了较低的每单位成本。我试图创建一个更新查询,该查询通过将购买的单位乘以股票价格或合同价格(取决于)来计算总成本。我正在使用phpmyadmin。我已经坚持很长时间了,不胜感激。

基本上我想根据我的order_details表中的详细信息更新订单表中的总费用。我已经使用CASE决定是将单位乘以合同价格还是股价。

当我在下面运行查询时,我没有收到任何错误,但它不会影响表中的任何行

    UPDATE orders 
    INNER JOIN order_details ON orders.`Order No` = order_details.OrderId 
    INNER JOIN contracts ON order_details.contractId = contracts.`Contract ID` 
    INNER JOIN stock ON contracts.`Product Code` = stock.`Product code` 
    SET orders.`total cost` = (CASE WHEN order_details.contractId = 
    contracts.`Contract ID` THEN order_details.Unitspurchased * 
    contracts.`Contract Price` ELSE order_details.Unitspurchased * stock.`Sale 
    price` END ) 
    WHERE order_details.OrderID = orders.`Order No``

1 个答案:

答案 0 :(得分:0)

首先,您需要某种汇总。

第二,我不知道这些列的真正位置。例如,我希望order_details有一个产品代码。

我希望这样的查询:

UPDATE orders o
       (SELECT od.order_id,
               SUM(od.Unitspurchased * COALESCE(c.`Contract Price`, s.`Sale price`)) as total_price
        FROM order_details od JOIN
             stock s
             ON od.`Product Code` = s.`Product code` LEFT JOIN
             contracts c
             ON od.contractId = c.`Contract ID` 
        GROUP BY od.order_id
       ) od
    SET o.`total cost` = od.total_cost ;

要加入合同,您可能还需要:

ON od.contractId = c.`Contract ID` AND
   od.`Product Code` = c.`Product Code`

如果产品在合同表中。

我还建议您修复列名。空格表示您需要对名称进行转义,这只会使查询难以编写和读取。