2014-08-23 4 views
0

Это моя таблица заказов. Я хочу сообщить все заказы, все детали которых готовы к отправке.Список заказов, которые все строки готовы

orderNo detailNo statusId status 
10001 1   40  Ready For Shipment 
10002 1   40  Ready For Shipment 
10002 2   20  Canceled 
10002 3   30  Pending 
10003 1   40  Ready For Shipment 
10003 2   40  Ready For Shipment 
10004 1   10  New Order 
10004 2   20  Canceled 
10004 3   40  Ready For Shipment 
10004 4   40  Ready For Shipment 

Ожидаемые результаты:

Orders Ready For Shipment 
10001 
10003 

Есть ли эффективный метод для достижения готового списка заказов без использования подзапросов?

ответ

1

Группа по orderno и использовать having, чтобы получить только те группы, не имеющие другой статус

select orderno 
from your_table 
group by orderno 
having sum(case when status <> 'Ready For Shipment' then 1 end) = 0 

или с statusId

select orderno 
from your_table 
group by orderno 
having sum(case when statusid <> 40 then 1 end) = 0 
+0

Спасибо, работал с маленький модификация. Я отредактировал ответ. – Rapunzo

-1

Вы пробовали это?

SELECT orderNo from <TABLE NAME> 
WHERE status="Ready For Shipment" ORDER BY orderNo 
0
select Distinct a.orderId 
from ordersTable a 
inner join 
(
    select orderNo, Avg(statusId) 
    from ordersTable 
    group by orderNo 
    having Avg(statusId) = 40) b 
on a.orderNo = b.orderNo 
+0

@ Ответ juergen работал для меня, потому что я искал решение без подзапросов. Спасибо за ваш ответ. – Rapunzo

Смежные вопросы