Hier ist eine alternative Option zu PIVOT
Ihre Ergebnisse mit MAX
mit CASE
das erfordert nicht, dass die Tabelle wieder mit sich selbst verbunden wird:
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