SQL, использующий Sum и Group By для нескольких таблиц с разными первичными ключами - PullRequest
0 голосов
/ 01 января 2019

Допустим, у меня есть следующие таблицы: inv_mast, po_hdr, po_line и vessel_receipts_line И у меня есть следующие данные:

inv_mast.inv_mast_uid
12
2852

po_hdr.po_no
1000019
1000118

po_line.po_no|line_id|po_line_uid|inv_mast_uid
1000019      |1      |234        |12
1000118      |1      |646        |2852
1000118      |2      |648        |2852

vessel_receipts_line.po_line_uid|container_qty_received|row_status_flag
234                             |9700                  |702
646                             |320000                |702
646                             |2710000               |701
648                             |3250000               |702

Теперь я пытаюсь суммировать container_qty_received для каждого po_no + inv_mast_uid + row_status_flag, которыйдолжно быть 702. Например, ожидаемый результат:

po_no  |inv_mast_uid|container_qty_received|row_status_flag
1000019|12          |9700                  |702
1000118|2852        |3570000               |702
1000118|2852        |2710000               |701

Я пробовал несколько разных кодов, с левым соединением или с подзапросом, ни один из них не работает.Две величины просто не суммируются.Результат теперь:

po_no  |inv_mast_uid|container_qty_received
1000019|12          |9700
1000118|2852        |320000
1000118|2852        |3250000

Вот одна из моих попыток.

SELECT a.inv_mast_uid
, b.qty_in_vessel as qty_in_vessel
, c.po_no
FROM po_line a
LEFT JOIN
po_hdr AS c ON a.po_no = c.po_no
LEFT JOIN 
(
SELECT vessel_receipts_line.po_line_uid, SUM(vessel_receipts_line.container_qty_received) AS qty_in_vessel
FROM vessel_receipts_line
WHERE vessel_receipts_line.row_status_flag = 702
GROUP BY
vessel_receipts_line.po_line_uid
) AS b
ON b.po_line_uid = a.po_line_uid
GROUP BY
a.inv_mast_uid, b.qty_in_vessel, c.po_no
ORDER BY c.po_no

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 01 января 2019

Соедините po_line и vessel_receipts_line на po_line_uid, сгруппируйте по po_no и inv_mast_uid и сложите container_qty_received.

SELECT pl.po_no,
       pl.inv_mast_uid,
       vrl.row_status_flag,
       sum(vrl.container_qty_received) container_qty_received
       FROM po_line pl
            INNER JOIN vessel_receipts_line vrl
                       ON vrl.po_line_uid = pl.po_line_uid
       GROUP BY pl.po_no,
                pl.inv_mast_uid,
                vrl.row_status_flag;

db <> скрипка

...