Tenho uma tabela com a seguinte estrutura:
create table test_table
(queuename number,
duration_sum number,
rating_sum number,
rating_avg number,
rating_cnt number
)
Aqui estão os dados de exemplo:
insert into test_table (queuename, duration_sum, rating_sum, rating_avg,rating_cnt)
values (1000,50,40,60,70);
insert into test_table (queuename, duration_sum, rating_sum, rating_avg,rating_cnt)
values (1010,12,40,25,34);
insert into test_table (queuename, duration_sum, rating_sum, rating_avg,rating_cnt)
values (2000,50,34,60,23);
insert into test_table (queuename, duration_sum, rating_sum, rating_avg,rating_cnt)
values (3000,90,40,60,67);
commit;
O que preciso é o resultado abaixo:
queuename 1000 1010 2000 3000
duration_sum 50 12 50 90
rating_sum 40 40 34 40
rating_avg 60 25 60 60
rating_cnt 70 34 23 67
Estou tentando usar pivot
isso e isso é o que escrevi até agora:
select *
from (
select
queuename,
'duration_sum' as measure, duration_sum as value from test_table
union all
select
queuename,
'rating_sum' as measure, rating_sum as value from test_table
union all
select
queuename,
'rating_avg' as measure, rating_avg as value from test_table
union all
select
queuename,
'rating_cnt' as measure, rating_cnt as value from test_table
)
pivot (
max(value)
for queuename in (1000 as "1000", 1010 as "1010", 2000 as "2000", 3000 as "3000")
)
order by measure;
Essa é uma abordagem melhor para pivoting
o resultado? Acho que pode haver uma abordagem melhor para usar pivot
a instrução em vez de usar union
. Eu deveria dizer que 'queuename' é único.
Desde já, obrigado.
Seus dados já estão pivotados, mas não pelas colunas que você precisa. Você pode despivotar e pivotar novamente: