Создать запрос на обновление, который рассчитывает общую стоимость? - PullRequest
1 голос
/ 07 апреля 2019

Так клиенты покупают продукты. некоторые клиенты имеют контракты на отдельные продукты и платят меньшую стоимость за единицу. Я пытаюсь создать запрос на обновление, который рассчитывает общую стоимость путем умножения приобретенных единиц на цену акций или контрактную цену в зависимости. Я использую 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 голосов
/ 07 апреля 2019

Во-первых, вам нужна какая-то агрегация.

Во-вторых, я не понимаю, где на самом деле расположены столбцы. Например, я ожидаю, что 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`

Если товар находится в таблице контракта.

Я бы также порекомендовал вам исправить имена столбцов. Наличие пробелов означает, что вам нужно экранировать имена, что затрудняет написание и чтение запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...