2016-12-12 10 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

を意味するのでしょうか? – xQbert

答えて

2

希望するものはです。グループの行はinspection_passed = '1'です。それでは、それらを数えてみましょう:値のみ01NULLにかかる

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場合はあなたが行うことができます:

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

それは完璧に働いた、非常に感謝し、迅速な答えのためにありがとう(悲しいことに私は愚かなstackoverflowのルールのために正しい答えとしてマークすることができます) –

+0

存在しないソリューションは少しより最適化されています。 –

+0

'countを持つ(i.inspection_passed!= 1またはi.inspection_passedがnullの場合)= 0'はかなり簡単です。そして、私は@TGray re:より効率的なソリューションに同意します。 – mathguy

2

をあなたが持っているすべての車とのデータのセットを生成取得することができます検査に失敗し、使用していません...サブクエリを配備しています。なぜあなたはカウントが必要なのかわからない。

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'が失敗したことを意味します。 0が失敗した

または変更とinspection_passed = '0'からinspection_passed <> '1'

関連する問題