В таком виде не подойдет ?
mysql> select email, group_concat(concat(character_name, ':',
class_name, ' ',character_level,' lvl') separator ', ') as Chars
from characters,players,classes
where player_id=players.id and class_id=classes.id group by player_id;
+--------+--------------------------------------------+
| email | Chars |
+--------+--------------------------------------------+
| a@a.ru | Merlin:wizard 70 lvl, Conan:warrior 80 lvl |
| b@b.ru | Azariel:warrior 50 lvl, Bilbo:thief 20 lvl |
+--------+--------------------------------------------+
2 rows in set (0.00 sec)
в ORacle вместо group_concat используйте LISTAGG
Если надо отдельно в каждой колонке выводить по отдельному классу, то измените select добавив через запятую выражение аналогично выводу для Сhars, но с использованием, например , CASE где сравниваете через WHEN с требуемым классом.