If you can have more than one non-zero value for COD, this will work
drop table MyTable CREATE TABLE MyTable ( COD INT, ID INT, VALUE VARCHAR(20) ) INSERT INTO MyTable VALUES (28,1, NULL), (28,2,'Supermarket'), (28,3,'School'), (29,1,NULL), (29,2,'School'), (29,3,NULL), (30,1,NULL); WITH Dups AS (SELECT COD FROM MyTable GROUP BY COD HAVING count (*) > 1 ) SELECT MyTable.COD,MyTable.ID,MyTable.VALUE FROM MyTable INNER JOIN dups ON MyTable.COD = Dups.COD WHERE value IS NOT NULL UNION SELECT MyTable.COD,MyTable.ID,MyTable.VALUE FROM MyTable LEFT JOIN dups ON MyTable.COD = Dups.COD WHERE dups.cod IS NULL
source share