Check this...
IF OBJECT_ID('TableA') IS NOT NULL DROP TABLE TableA IF OBJECT_ID('TableB') IS NOT NULL DROP TABLE TableB CREATE TABLE TableA (ID INT, Color VARCHAR(max), Location VARCHAR(max), Class VARCHAR(max)) CREATE TABLE TableB (child_ID INT, parent_ID INT, Color VARCHAR(10), Location VARCHAR(10), Class VARCHAR(10)) INSERT INTO TableB SELECT 1,1,'white','house' ,'I' UNION SELECT 2,2,'red' ,'garage' ,'II' UNION SELECT 3,2,'white','garage' ,'I' UNION SELECT 4,3,'blue' ,'house' ,'IV' UNION SELECT 5,3,'blue' ,'garage' ,'I' UNION SELECT 6,3,'white','garage' ,'I' UNION SELECT 7,3,'gray' ,'garage' ,'I' UNION SELECT 8,2,'gray' ,'house' ,'IV' SELECT * FROM TableB DECLARE @cmd VARCHAR(max); SET @cmd = 'INSERT INTO TableA SELECT ID = b.parent_id ' SELECT @cmd = @cmd + ' , ['+COLUMN_NAME+'] = STUFF( ( SELECT '', '' +'+COLUMN_NAME+' FROM TableB WHERE parent_id = b.parent_id GROUP BY '+COLUMN_NAME+' FOR XML PATH('''') ) , 1, 2, '''' )' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TableB' AND COLUMN_NAME NOT IN ('child_ID', 'parent_id') SELECT @cmd = @cmd + ' FROM TableB AS b GROUP BY b.parent_id' EXEC(@cmd) SELECT * FROM TableA