Using Cross Apply and Pivot, we can achieve this.
DECLARE @Table1 TABLE ( ID varchar(3), IC varchar(8), Name varchar(6), UGCOS varchar(9), MCOS varchar(7)) ; INSERT INTO @Table1 ( ID , IC , Name , UGCOS , MCOS ) VALUES ('1AA', 'A123456B', 'Edmund', 'Australia', 'Denmark'), ('1AA', 'A123456B', 'Edmund', 'Australia', 'France'), ('2CS', 'C435664C', 'Grace', 'Norway', NULL), ('3TG', 'G885595H', 'Rae', NULL, 'Japan') ; Select ID , IC , Name , UGCOS,MAX([MCOS1])[MCOS1],MAX([MCOS2])[MCOS2] from ( select ID , IC , Name , UGCOS , MCOS,col,val,col +''+CAST(ROW_NUMBER()OVER(PARTITION BY ID ORDER BY col) AS VARCHAR)RN from @Table1 CROSS APPLY (values('MCOS',MCOS))CS(col,val))T PIVOT (MAX(val) FOR RN IN ([MCOS1],[MCOS2]))PVT GROUP BY ID , IC , Name , UGCOS