Fazer um “pivot” permite reestruturar dados de uma estrutura de dados tipicamente normalizada para um formato diferente, e assim formatar as informações que você precisa de uma maneira muito mais legível aos olhos do usuário que requisita as informações.

As cláusulas PIVOT e UNPIVOT fazem parte das novas features da versão 11g. Nas versões anteriores era necessário uma codificação mais elaborada e complicda, usando CASE. Agora, além de facilitar na codificação, esta operação foi otimizada (segundo a documentação oficial do Oracle) – e assim a operação ganhou uma boa melhora de desempenho em relação a codificação com CASE, considerando obviamente SELECT’s equivalentes.

PIVOT

Permite “nivelar” uma tabela normalizada. Muito útil para formatar visualmente os dados para o seu aplicativo ou para um relatório. A melhor maneira de entender tanto o funcionamento do PIVOT quanto o seu resultado é mostrar um exemplo.
Vamos imaginar que temos uma tabela de VENDAS, em uma empresa que distribui chocolates – e nós queremos relatórios sumarizados, mostrando totais de cada chocolate em colunas separadas, e também agrupando por cliente.
Vamos ao que interessa!

Tabela criada, agora vamos popular a tabela:

Agora vamos usar o PIVOT para mostrar o total vendido de cada produto em apenas uma linha, com um produto por coluna.

UNPIVOT

A cláusula UNPIVOT faz o caminho inverso: pega uma tabela “pivoteada” e normaliza. Como exemplo, vou usar os mesmos dados para criar uma nova tabela.

E finalmente o uso do UNPIVOT!

Opa! Peraí Milton, mas no primeiro exemplo eram 10 registros. E agora ficaram apenas 9 registros. Por que?

Muito simples. Reparem que no conjunto inicial de registros, o mesmo cliente (10) comprou o mesmo produto (Charge) por duas vezes. Após agrupar os registros em outra tabela, como fizemos na vendas_2, fica impossível o Oracle adivinhar que essa quantidade veio de 2 registros diferentes. Na prática, ou melhor dizendo, em um sistema do mundo real, esta tabela teria mais algum campo para diferenciar essas vendas (um campo com a data da venda, por exemplo), e caso o agrupamento fosse feito por este campo, aí sim seria possível a quebra mais detalhada dos registros.