iit depends on your data, if any status other than OK, then it fails, for example?
With MyCTE (Product,Parts,Status)
AS
(
SELECT 'Laptop1','mouse','OK' UNION ALL
SELECT 'Laptop1','screen','OK' UNION ALL
SELECT 'Laptop1','button','OK' UNION ALL
SELECT 'Laptop2','mouse','OK' UNION ALL
SELECT 'Laptop2','screen','OK' UNION ALL
SELECT 'Laptop2','button','NOT OK'
)
select T1.Product, CASE
WHEN T2.Product IS NOT NULL
THEN 'Failed'
ELSE 'OK'
END
FROM MyCTE T1
LEFT OUTER JOIN (SELECT Product FROM MyCTE WHere Status <> 'OK') T2
ON T1.Product = T2.Product
GROUP BY T1.Product,T2.Product
Lowell