This can be done using MERGE :
DECLARE @T TABLE (User_ID CHAR(1), Role_ID CHAR(1)); INSERT @T (User_ID, Role_ID) VALUES ('A', 'X'), ('A', 'Z'), ('B', 'Y'), ('C', 'X'), ('C', 'Y'), ('D', 'Y'); SELECT * FROM @T; WITH Y AS ( SELECT *, [d] = COUNT(*) OVER(PARTITION BY User_ID) FROM @T WHERE Role_ID IN ('Y', 'X') ), X AS ( SELECT * FROM @T WHERE Role_ID = 'X' ) MERGE INTO Y USING X ON X.User_ID = Y.User_ID WHEN MATCHED AND Y.Role_ID = 'Y' AND d > 1 THEN DELETE WHEN NOT MATCHED BY SOURCE THEN UPDATE SET Role_ID = 'X'; SELECT * FROM @T;
source share