суммирование данных 2 столбцов в одной таблице с другим условием

0

У меня есть 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

Теги:

1 ответ

0

Просто используйте условную агрегацию:

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;

Это просто предоставляет столбцы агрегации. Вы должны иметь возможность присоединиться к остальным столбцам, которые вы хотите.

  • 0
    Я сделал так: 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 но она возвращает упорядоченные и полученные в отдельной строке
  • 0
    @ user3368088. , , Этот ответ возвращает одну строку на ref_id ? Должно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню