Pessoal,
Boa Tarde!
Na versão 11g do Oracle Database foi incluído um novo recurso na instrução SELECT que é o: PIVOT. Agora em um comando SQL(SELECT) podemos facilmente transformar: linhas, formatadas em: colunas. Antes do surgimento do Oracle Database 11 g, para realizar essa ação era necessário usar algum tipo de função para percorrer cada valor e escreve-los em colunas independentes.
1 - Como exemplo, criamos uma tabela TB_PIVOT, que armazenará como informações: Estado, Ano e Valor, e inserimos alguns dados:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 SQL> create table tb_pivot (uf varchar2(2), ano number(4), valor number(10,2)); Table created SQL> insert into tb_pivot values('SP',1999,20.50); 1 row inserted SQL> insert into tb_pivot values('SP',1999,22.50); 1 row inserted SQL> insert into tb_pivot values('SP',2000,11.30); 1 row inserted SQL> insert into tb_pivot values('SP',2000,14.30); 1 row inserted SQL> insert into tb_pivot values('SP',2010,5); 1 row inserted SQL> insert into tb_pivot values('SP',2010,5); 1 row inserted SQL> commit; Commit complete
2 - Como resultado da tabela obtemos os dados abaixo. Note, temos as informações linha a linha! Para o estado de SP, temos no ano de 1999 dois lançamentos:
SQL> select * from tb_pivot; UF ANO VALOR -- ----- ------------ SP 1999 20,50 SP 1999 22,50 SP 2000 11,30 SP 2000 14,30 SP 2010 5,00 SP 2010 5,00 6 rows selected
3 - Vamos agora transformar as linhas em colunas, utilizando o novo recurso: PIVOT.
Somamos a coluna VALOR e agrupamos estes valores por colunas nos seus respectivos anos. Perceba que os anos agora são apresentados na linha de cabeçalho!
Importante: Neste cenário que estamos utilizando como exemplo, se filtrarmos(IN) um ano que não exista informações lançadas, 2015 por exemplo, surgirá uma coluna para este ano, porém sem informações, nula, como abaixo:
SQL> select * from tb_pivot 2 PIVOT(sum(valor) for ano in (1999,2000,2010,2015)); UF 1999 2000 2010 2015 -- ---------- ---------- ---------- ---------- SP 43 25,6 10 SQL>
Abraço,
Ronaldo
Nenhum comentário:
Postar um comentário