2016-12-12 5 views
0

Я хочу получить список всех автомобилей, которые не прошли проверку, но я понятия не имею, как это сделать. Лучшее, что у меня есть на данный момент, это список автомобилей, которые прошли.Oracle: показать записи, которые не соответствуют условиям

SELECT c.CAR_MAKE, c.CAR_MODEL, c.CAR_REGISTRATION, COUNT(*) as "Inspections Passed" 
from inspection i 
INNER JOIN car c 
on i.CAR_ID = c.CAR_ID 
WHERE i.INSPECTION_PASSED = '1' 
GROUP BY c.CAR_MAKE,c.CAR_MODEL,c.CAR_REGISTRATION 
HAVING count(*) >=1; 

Заранее благодарен!

+0

делает 0 означает неудачу? – xQbert

ответ

2

Что вы хотите для всего строк в группе, чтобы иметь inspection_passed = '1'. Итак, давайте считать их:

SELECT c.CAR_MAKE, c.CAR_MODEL, c.CAR_REGISTRATION, 
     COUNT(*) as "Inspections Passed" 
FROM inspection i INNER JOIN 
    car c 
    on i.CAR_ID = c.CAR_ID 
GROUP BY c.CAR_MAKE, c.CAR_MODEL, c.CAR_REGISTRATION 
HAVING count(*) = SUM(case when i.INSPECTION_PASSED = '1' then 1 else 0 end); 

Если INSPECTION_PASSED принимает только значения 0, 1 и NULL вы можете сделать:

HAVING count(*) = SUM(INSPECTION_PASSED); 
+0

Это сработало отлично, спасибо вам большое и спасибо за быстрый ответ (к сожалению, я могу отметить правильный ответ из-за глупых правил stackoverflow) –

+0

Не существует решения, которое немного оптимизировано. –

+0

'с подсчетом (случай, когда i.inspection_passed! = 1 или i.inspection_passed равно null) = 0' кажется немного проще. И я согласен с @TGray re: более эффективное решение. – mathguy

2

Вы можете получить генерировать набор данных со всеми автомобилями, которые имеют не удалось проверить и использовать не существует ... coorlating подзапрос. Не знаете, почему вам нужен счет или есть.

SELECT c.CAR_MAKE, c.CAR_MODEL, c.CAR_REGISTRATION 
FROM car c 
WHERE NOT EXISTS (SELECT 1 
        FROM inspection I 
        WHERE I.Car_ID = C.car_ID 
        and inspection_passed <> '1') 

Предполагается, что <> '1' не соответствует.

или изменения и inspection_passed <> '1' в inspection_passed = '0')

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