У меня есть 2 таблицы, заказы и order_lineitems. заказы содержат информацию о статусе заказа (дата продажи, номер счета, тип продажи и т. д.) order_lineitems содержит элементы для каждого заказа в отношении один ко многим. Поскольку мы предоставляем информацию о доставке по позициям, ship_date находится в таблице order_lineitems, ноль, если товар не отправлен, и дата, если он отправлен.
Я пытаюсь получить заказы, в которых все товары были отправлены, сравнивая количество строк позиций со строками позиций, у которых есть дата отгрузки. Хотя я успешно извлек всю эту информацию, я не могу сделать последний шаг, ограничивая набор результатов, чтобы включать только полностью отгруженные заказы (количество строк = количество строк, где ship_date не равно нулю).
Я знаю, что упускаю что-то простое, но просто не вижу этого.
select sum(custom.lineitems) as totalitems, sum(custom.shipped) as totalshipped,
custom.invoice, z.shipregion
from (
select a.invoice, count(a.invoice) as lineitems, 0 as shipped
from order_lineitem a
group by a.invoice
UNION ALL
select b.invoice, 0 as notshipped, count(b.ship_date) as shipped
from order_lineitem b
where b.ship_date is not null
group by b.invoice
) as custom
left join orders z on custom.invoice = z.invoice
where z.result = 0
and z.respmsg like 'Approved%'
and z.shipregion <> 'PENDING'
and z.cancelorder = 0
group by custom.invoice;
Это возвращает такой набор результатов (одна строка для каждого счета в БД)
totalitems totalshipped invoice shipregion
4 2 1000 REGION08
1 1 10001 REGION07
1 1 10004 REGION05
3 1 10006 REGION05
2 2 10007 REGION04
1 1 10008 REGION08
7 7 10009 REGION01
1 1 1001 REGION08
То, что я ищу, - это такой набор результатов - только там, где totalitems = totalshipped
totalitems totalshipped invoice shipregion
1 1 10001 REGION07
1 1 10004 REGION05
2 2 10007 REGION04
1 1 10008 REGION08
7 7 10009 REGION01
1 1 1001 REGION08