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 Product, MIN(status) FROM MyCTE GROUP BY Product
select Product, MIN(status) FROM yourTable GROUP BY Product
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
With MyCTE (Product,Parts,Status)AS( SELECT 'Laptop1','mouse','OK' UNION ALL SELECT 'Laptop1','screen','OK' UNION ALL SELECT 'Laptop1','button','PASS' UNION ALL SELECT 'Laptop2','mouse','OK' UNION ALL SELECT 'Laptop2','screen','OK' UNION ALL SELECT 'Laptop2','button','NOT OK' UNION ALL SELECT 'Laptop3','button','OK' UNION ALL SELECT 'Laptop3','screen','PASS' UNION ALL SELECT 'Laptop3','mouse','PASS' UNION ALL SELECT 'Laptop4','button','PASS' UNION ALL SELECT 'Laptop4','screen','PASS' UNION ALL SELECT 'Laptop4','mouse','PASS' ) select Product , status=CASE MIN(status) WHEN 'OK' THEN MIN(status) WHEN 'PASS' THEN 'OK' ELSE 'NOT OK' END FROM MyCTE GROUP BY Product
DROP TABLE #TestDataCREATE TABLE #TestData(Product NVARCHAR(100),Parts NVARCHAR(100),Status NVARCHAR(100))INSERT INTO #TestData(Product,Parts,Status) 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','button','NOT OK' UNION ALL SELECT 'Laptop2','screen','OK'