I have a SQL table_1
with the following data:
There are multiple entries with and the same MSISDN gets repeated, but with different servicCodes
in each line.
I would like to copy the info into a new table_2
, but with only one entry per MSISDN and some extra columns with the services assigned to it. Can this be done with a single SQL query, or is it be best to use PHP to do a distinct query and loop through the results?
Thanks.
With SQL you can create a second table with a column with the servicCodes concatenated. You can use the GROUP BY
to aggregate around the MSISDN column.
SELECT MSISDN, GROUP_CONCAT(servicCodes) as servicCodes_concatenated
FROM table
GROUP BY MSISDN
If you want to create multiple columns to have the values of servicCodes it's easier to use PHP.
Use INSERT ... SELECT
syntax so you can filter and modify rows in single query. https://dev.mysql.com/doc/refman/5.7/en/insert-select.html
I'd guess what you're looking for is called a Pivot Table.
Everything is most probably said there, so just one comment on them:
As you get dynamic column names per definition it's hard(er) to deal with those columns lateron. Thus you most probably need some more sophisticated procedures to make further/other use of that data than just reporting it.