;With TestData (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','mouse','PASS' UNION ALL SELECT 'Laptop5','button','PASS' UNION ALL SELECT 'Laptop5','screen','PASS' UNION ALL SELECT 'Laptop5','mouse','PASS' ), C AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Status ORDER BY Product) AS Rn FROM TestData),C1 AS (SELECT *,MIN(Rn)OVER(PARTITION BY Status) MinRn FROM C)SELECT Product, Status, Rn, MinRn FROM C1 --WHERE Rn=MinRnORDER BY Product ASC, Status
declare @TestStatus as table(TestStatusDescription nvarchar(50),TestResult int)insert into @testStatus (TestStatusDescription,TestResult) values ('OK',1)insert into @testStatus (TestStatusDescription,TestResult) values ('Pass',1)insert into @testStatus (TestStatusDescription,TestResult) values ('Fail',0)insert into @testStatus (TestStatusDescription,TestResult) values ('Not OK',0)...
SELECT Product, MIN(CASE WHEN Status = 'NOT OK' THEN 'NOT OK' ELSE 'OK' END) AS [Overall Status]FROM dbo.tablenameGROUP BY Product