Вы хотите транспонировать набор записей (отключить, а затем развернуть другой exis). Переносимым решением является использование union
, а затем условное агрегирование:
select
name,
max(case when category = 'A' then val end) as valA,
max(case when category = 'B' then val end) as valB
from (
select category, premium val, 'premium' name from mytable
union all select category, net_premium, 'net_premium' from mytable
union all select category, claims, 'claims' from mytable
union all select category, fees, 'fees' from mytable
union all select category, expenses, 'expenses' from mytable
union all select category, commissions, 'commissions' from mytable
) x
group by name
Важно: чтобы union
работал, типы данных всех объединяемых столбцов должны быть одинаковыми (кажется, чтослучай с вашими данными, то есть как десятичные значения везде). Если нет, вам нужно выполнить преобразования, чтобы выровнять типы данных.