Đây là một tùy chọn thay thế cho PIVOT
kết quả của bạn bằng cách sử dụng MAX
với CASE
điều đó không yêu cầu tham gia bảng trở lại chính nó:
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