Намирам, че е много по-лесно просто да използвам условно агрегиране:
select id,
max(case when type = 'A' then value end) as a,
max(case when type = 'B' then value end) as b,
max(case when type = 'C' then value end) as c
from t
group by id;
Можете да вмъкнете резултатите в таблица, като използвате create table as
. Това трябва да работи и с обобщена заявка.