#sql #join
Вопрос:
У меня есть эти три таблицы,
PO_HEADER
po_number | имя поставщика |
---|---|
10001 | Xyz |
100002 | азбука |
PO_LINEITEM
номер строки | po_number | item_quantity | получен_количество |
---|---|---|---|
0001 | 10001 | 20 | 10 |
0002 | 10001 | 80 | 10 |
0002 | 10002 | 40 | 35 |
ОТПРАВКА_ЛИНЕЙТЕМ
номер строки | po_number | shipping_quant |
---|---|---|
0001 | 10001 | 20 |
Как получить order_master на основе этих двух условий
- если какой-либо элемент po_lineitem имеет значение item_quantity > полученное количество.
- если у po_lineitem есть item_quantity > (сумма ранее отправленного количества из asn_lineitem для того же номера строки и номера) .2(b) если в asn_lineitem нет элементов, это должно возвращать значение true.
Я написал этот запрос, но не смог выполнить 2(b)
select count(*) from erp_po_header
where po_number in
(select erlitms.po_number from erp_po_line_items erlitms
JOIN
(select sum(shipping_quantity) as total_prev_shipped_items,po_number,item_number from
asn_lineitem
Group by po_number,item_number)
asn_items
ON erlitms.po_number = asn_items.po_number
and erlitms.item_number = asn_items.item_number
and erlitms.item_quantity > CAST (erlitms.received_quantity AS INTEGER)
and erlitms.item_quantity > asn_items.total_prev_shipped_items )
Комментарии:
1. … Я не понимаю второго условия. Как определяется «ранее отправленный»? В ваших образцах данных нет даты. Что такое
asn_lineitem
? Это не определено.2. Ваш запрос, описание и примеры имен таблиц не совпадают, предлагаю вам прочитать корректуру и внести некоторую ясность.