Hier is een alternatieve optie voor PIVOT
uw resultaten met behulp van MAX
met CASE
waarvoor het niet nodig is om de tafel weer bij zichzelf te voegen:
select t.id1, t.id2, t.a, t.b,
max(case when t2.name = 'C1' then t2.vint end) c1,
max(case when t2.name = 'C2' then t2.vstring end) c2,
max(case when t2.name = 'C3' then t2.vdata end) c3
from tab1 t
left join tab2 t2 on t.id1 = t2.id1 and t.id2 = t2.id2
group by t.id1, t.id2, t.a, t.b