Если тегов не больше, вы можете выполнить условное агрегирование:
select id,
max(case when seq = 1 then tag end) as tag_1,
max(case when seq = 2 then tag end) as tag_2,
max(case when seq = 3 then tag end) as tag_3
from (select t1.id, t2.*, row_number() over (partition by t1.id order by t2.tag) as seq
from table1 t1 inner join
table2 t2
on t2.id = t1.id
) t
group by id;
Если в таблице больше тегов, то вам нужен Dynami c Pivot.