What version of SQL are you using? If 2005 or later, this should work for you:-- Sample DataDECLARE @MyTable TABLE(Name VARCHAR(50), LinkID INT, IsPrimary BIT, ID CHAR(1))INSERT @MyTableSELECT 'John Smith', 1234, 1, NULL UNION ALL SELECT 'Joan Smith', 1234, 0, NULLUNION ALL SELECT 'Tom Smith', 1234, 0, NULLUNION ALL SELECT 'Frank Smith', 9234, 0, NULLUNION ALL SELECT 'Bob Smith', 9234, 1, NULL-- Run UpadateUPDATE TSET ID = CHAR(64 + RowNum) FROM ( SELECT ID, ROW_NUMBER() OVER (PARTITION BY LinkID ORDER BY IsPrimary DESC, Name) AS RowNum FROM @MyTable AS M ) AS T-- Check updateSELECT *FROM @MyTable