Mysql объединение с тремя таблицами не работает, как ожидалось - PullRequest
0 голосов
/ 09 мая 2018

У меня есть три разных таблицы, одна из них - таблица products_request с запрошенным количеством и ценой, вторая - products_header_response с деталями идентификатора заказа, а третья - таблица products_response в качестве подтвержденного количества и цены. Теперь я хочу запросить общее количество запрошенного количества, умноженное на цену ( означает общее количество запрашиваемых продуктов в долларах) и подтвержденное количество, умноженное на цену (общее количество подтвержденных продуктов в долларах). Но я получаю неправильную сумму для некоторых заказов и правильную сумму для некоторых заказов.

For example correct scenario is total requested quantity values is $200 then confirmed quantity values is also $200 (if we confirm all requested products)
Wrong scenario is requested quantity value is $200 and confirmed quantity values is more than requested quantity value like some $300. 

Ниже приведен мой запрос на объединение 3 таблиц.

SELECT resp.id,resp.order_number,resp.orderdate,
ROUND(SUM(req.`requested_quantity` * req.`net_price`),2) AS Req_Order_Amnt,
ROUND((SUM(items_resp.dispatch_quantity * items_resp.`net_price`)+ SUM(items_resp.backorder_quantity * items_resp.`net_price`)),2) 
AS Tot_Confirmed_Amnt,
req.edi_order_id,req.requested_quantity
FROM products_header_response resp
JOIN products_request req 
ON req.`edi_order_id` = resp.`order_number`
JOIN products_response items_resp 
ON resp.id= items_resp.`edi_order_response_id` 
WHERE DATE(resp.orderdate) BETWEEN '20180411' AND '20180411'  AND (items_resp.`dispatch_quantity`!='' OR items_resp.`backorder_quantity`!='')
GROUP BY items_resp.`edi_order_response_id`

В таблице products_response подтвержденное количество будет отправлено в двух столбцах, т.е. dispatch_quantity и backorder_quantity. Если в столбце backorder_quantity имеется количество неупорядоченного заказа, если в столбце dispatch_quantity есть количество отправки, то в обоих столбцах будет отправлено количество в обоих столбцах.

For example requested quantity 100, then if dispatch quantity is 50 and backorder quantity is 20  then 50, 20 will be sent in respective columns and 30 will be sent as rejected quantity.

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

SELECT resp.id,resp.order_number,resp.orderdate,
ROUND((SUM(items_resp.dispatch_quantity * items_resp.`net_price`) + SUM(items_resp.backorder_quantity * items_resp.`net_price`)),2) 
AS Tot_Confirmed_Amnt
FROM product_header_response resp
JOIN products_response items_resp 
ON resp.id= items_resp.`edi_order_response_id` 
WHERE DATE(resp.orderdate) BETWEEN '20180411' AND '20180411'  
AND (items_resp.`dispatch_quantity`!='' OR items_resp.`backorder_quantity`!='')
GROUP BY items_resp.`edi_order_response_id`

Пожалуйста, поправьте меня, где я делаю неправильно с соединениями. Любая помощь будет принята с благодарностью.

products_respose table
id| order_number
3456 ABC123

Products Request table 
edi_order_id| requested_quantity|net_price|product_id
ABC123           2                26.44    pr123 
ABC123           2                22.29    pr234
ABC123           1                12.34    pr321 
ABC123           2                20.05    pr345
ABC123           1                18.26    pr546
ABC123           2                26.48    pr456
ABC123           2                26.44    pr567

Таблица ответов продуктов

dispatch_quantity|backorder_quantity|net_price | product_id | edi_order_resp_id
-                   -                 26.44         pr123         3456
-                   -                 22.29         pr234         3456
-                   -                 12.34         pr321         3456
2                   -                 20.05         pr345         3456
-                   -                 18.26         pr546         3456
2                   -                 26.48         pr456         3456
-                   -                 26.44         pr567         3456

Ожидаемый результат должен быть

Order_id | Tot_req_Qty_amount |Tot_confirmed_Qty_amount| Requested_products
ABC123     274.00               93.96                      12

Но я получаю неправильный результат из трех соединений

Order_id | Tot_req_Qty_amount |Tot_confirmed_Qty_amount| Requested_products
    ABC123     548.00               651.42                      24
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...