У меня есть 2 таблицы jornal_main
и journal_item
, моя таблица journal_main
id | po_no | period | post_date | vendor 1 | PO123 | 12 | 2018-02-12 | XYZ 2 | PO234 | 12 | 2018-02-13 | ABC
journal_item is id | ref_id | type | sku | qty | desc 1 | 1 | poo | A123 | 12 | Order 2 | 1 | poo | B234 | 20 | Order 3 | 2 | por | A123 | 2 | Receive 4 | 2 | por | A123 | 3 | Receive 5 | 2 | por | B234 | 6 | Receive
id | ref_id | type | sku | qty | desc 1 | 1 | poo | A123 | 12 | Order 2 | 1 | poo | B234 | 20 | Order 3 | 2 | por | A123 | 2 | Receive 4 | 2 | por | A123 | 3 | Receive 5 | 2 | por | B234 | 6 | Receive
Желаемый вывод - po_no | date | vendor | item | ordered_qty | received_qty | balance po123 | 2018-02-12 | XYZ | A123 | 12 | 5 | 7 po123 | 2018-02-12 | ABC | B234 | 20 | 6 | 14
po_no | date | vendor | item | ordered_qty | received_qty | balance po123 | 2018-02-12 | XYZ | A123 | 12 | 5 | 7 po123 | 2018-02-12 | ABC | B234 | 20 | 6 | 14
Я не получаю, как объединить 2 запроса в одном запросе. Здесь у меня есть 2 запроса, которые дают мне ordered_qty
и received_qty
для order_qty
select journal_main.id, journal_main.po_no, journal_main.post_date, journal_main.vendor, journal_item. sku, SUM(journal_item.qty) AS Oqty FROM journal_main INNER JOIN journal_item ON journal_main.id=journal_item.ref_id WHERE journal_item.type='poo' GROUP BY journal_item.sku, journal_main.id
for received_qty
select journal_main.id, journal_main.po_no, journal_main.post_date, journal_main.vendor, journal_item. sku, SUM(journal_item.qty) AS Rqty FROM journal_main INNER JOIN journal_item ON journal_main.id=journal_item.ref_id WHERE journal_item.type='por' GROUP BY journal_item.sku, journal_main.id
Просто используйте условную агрегацию:
select ji.ref_id,
sum(case when ji.desc = 'Order' then qty else 0 end) as ordered,
sum(case when ji.desc = 'Receive' then qty else 0 end) as received,
sum(case when ji.desc = 'Order' then qty else - qty end) as total
from journal_item ji
where ji.desc in ('Order', 'Receive')
group by ji.ref_id;
Это просто предоставляет столбцы агрегации. Вы должны иметь возможность присоединиться к остальным столбцам, которые вы хотите.
select jm.po_no, jm.vendor, jm.post_date, ji.ref_id, sum(case when ji.type = 'poo' then qty else 0 end) as ordered, sum(case when ji.type = 'por' then qty else 0 end) as received, sum(case when ji.type = 'poo' then qty else - qty end) as total from journal_main jm INNER JOIN journal_item ji ON jm.id=ji.ref_id where ji.type in ('poo', 'por') group by jm.id
но она возвращает упорядоченные и полученные в отдельной строкеref_id
? Должно.