Для подобных вещей есть PIVOT и UNPIVOT
Но поскольку количество столбцов динамическое, то в чистом виде они так не умеют, поэтому ту часть запроса, где перечень столбцов, я бы формировал динамически (PHP, C#, T-SQL и т д... короче, что используете помимо чистых запросов)
https://www.sqlshack.com/dynamic-pivot-tables-in-s...
PS А вообще неплохо бы в теги добавить название БД: MSSQL, MYSQL, Oracle и т д