2013-07-30 2 views
0

Мне нужно учитывать только те номера заказов, в которых все товары имеют статус Active.SQL: Count Записи, если все столбцы равны

Существующие записи:

OrderNo  ProductID  Status 
1   1    Active 
1   2    Active 
1   3    Active 
2   1    Inactive 
2   2    Inactive 
3   3    Active 
4   1    Inactive 
4   3    Active 

Выход:

Completed 
2 

Примечание: Оба OrderNo 1 и 3 имеют продукт/с с активным статусом.

ответ

1
SELECT COUNT(*) 
FROM 
(
    SELECT OrderNo 
    FROM products 
    GROUP BY OrderNo 
    HAVING MIN(Status) = 'Active' AND MAX(Status) = 'Active' 
) AS dt 
+0

Работает как очарование. Мне нравится, что это простота. Спасибо. – abramlimpin

2

Чтобы получить общее количество заказов с активными номерами

SELECT COUNT(*) FROM 
(SELECT * FROM products WHERE OrderNo NOT IN (SELECT * FROM products WHERE Status = 'Inactive' GROUP BY OrderNo)) as tmp_b; OrderNo 

Чтобы получить только порядковые номера

SELECT OrderNo FROM 
(SELECT * FROM products WHERE OrderNo NOT IN (SELECT * FROM products WHERE Status = 'Inactive' GROUP BY OrderNo)) as tmp_b; 
+2

-1 Это будет считаться продуктом, для которого некоторые строки неактивны. – Andomar

+0

@Andomar - теперь он будет работать! –

+0

Downvote удален, но я думаю, что OP хочет, чтобы вы напечатали OrderNr вместо count – Andomar

1
select distinct OrderNo 
from  Products p1 
where not exists 
     (
     select * 
     from Products p2 
     where p1.OrderNo = p2.OrderNo 
       and p2.Status = 'Active' 
     ) 

Example at SQL Fiddle.

+0

Нужно группировать по orderno. – Joe

+0

@Joe: Ответ теперь перезаписан (без группы, хотя) – Andomar

0

Если предположить, что Active и Inactive единственный выбор:

select Count(distinct OrderNo) 
    from Products as OuterP 
    where not exists (select 42 from Products where OrderNo = OuterP.OrderNo and Status = 'Inactive') 

Индекс на OrderNo по возрастанию/Status по убыванию должен сделать это довольно быстро.

+0

Запрос должен возвращать список номеров заказов для заказов без активного продукта (а не счет) – Andomar

+0

@Andomar - название говорит «Count», вопрос гласит: count ", данные образца показывают количество. Даже комментарий «@Andomar Я хочу отобразить количество активных номеров заказов». заставляет меня думать, что ФП хочет подсчет. Что, молитесь, я пропустил? – HABO

+0

Я вижу вашу точку зрения, вопрос определенно может быть прочитан именно так. Мой комментарий был основан на данных примера. Он показывает '2', который является единственным номером заказа без активного продукта. Количество этих заказов было бы «1». – Andomar

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