Just use group concat with group by option like below -
Your main table -
| id | sub1 | sub2 | sub3 |
| 1 | kk nagar | Alwartirunagar | |
| 1 | Valasaravakkam | Nandambakkam | Ramapuram |
| 1 | Porur | Meenambakkam | Ashok Nagar |
| 1 | Anna Nagar | Kodambakkam | Nungambakkam |
| 2 | West Mambalam | Virugambakkam | T Nagar |
| 2 | KK Nagar | | |
Now when you run a query - select id,group_concat(sub1,'|',sub2) from t1 group by id ;
It will give you data like below
| id | group_concat(sub1,',',sub2,',',sub3) |
| 1 | kk nagar,Alwartirunagar,,Valasaravakkam,Nandambakkam,Ramapuram,Porur,Meenambakkam,Ashok Nagar,Anna Nagar,Kodambakkam,Nungambakkam |
| 2 | West Mambalam,Virugambakkam,T Nagar,KK Nagar,, |
Now just insert this data in another table by below query
insert into t2 select id,group_concat(sub1,',',sub2,',',sub3) from t1 group by id ;
Now you will get data in t2 like below
| id | grouped_sub |
| 1 | kk nagar,Alwartirunagar,,Valasaravakkam,Nandambakkam,Ramapuram,Porur,Meenambakkam,Ashok Nagar,Anna Nagar,Kodambakkam,Nungambakkam |
| 2 | West Mambalam,Virugambakkam,T Nagar,KK Nagar,,
Hope this will help you.
Note :- As question requirement are different -
Query - insert into t2 select * from (select id ,sub1 as subject from t1 union select id,sub2 as subject from t1 union select id,sub3 as subject from t1 ) temp where subject !='' order by id ;
| id | grouped_sub |
+------+----------------+
| 1 | Nungambakkam |
| 1 | Alwartirunagar |
| 1 | Ramapuram |
| 1 | Porur |
| 1 | Kodambakkam |
| 1 | kk nagar |
| 1 | Nandambakkam |
| 1 | Ashok Nagar |
| 1 | Anna Nagar |
| 1 | Valasaravakkam |
| 1 | Meenambakkam |
| 2 | West Mambalam |
| 2 | T Nagar |
| 2 | KK Nagar |
| 2 | Virugambakkam |