Em alguns casos é necessário você transformar algumas linhas do resultado da sua query em colunas, como se fosse uma matriz. Segue abaixo um roteiro explicando passo a passo como você deverá fazer essa atividade, tanto no SQL Server 2000 como na versão 2005.

Criar tabela

Tabela que será utilizada para exemplificar o Pivot Table.

Tabela

Figura 1: Tabela utilizada

Listagem 1: Criando a tabela

create table venda (ano int, mes int, valor numeric(9,2))

Inserir registros

Nesse passo você irá inserir alguns registros para massa de dados.

Listagem 2: Inserindo valores na tabela criada


insert venda values (2003, 2, 10)
insert venda values (2003, 2, 1)   
insert venda values (2003, 3, 20)
insert venda values (2003, 4, 30)
insert venda values (2004, 1, 40)
insert venda values (2004, 2, 50)
insert venda values (2004, 3, 60)
insert venda values (2004, 4, 70)
insert venda values (2005, 1, 80)
 
select * from venda order by 1,2,3
Dados inseridos

Figura 2: Dados inseridos

Pivot Table na versão 2000

Para fazer um Pivot Table na versão 2000 é necessário você utilizar função de grupo e a cláusula group by.

Listagem 3: Realizando o pivot no SQL Server 2000


select  ano
         , mes_1 = sum(case when mes=1 then valor end)
         , mes_2 = sum(case when mes=2 then valor end)
         , mes_3 = sum(case when mes=3 then valor end)
         , mes_4 = sum(case when mes=4 then valor end)
from tb_venda
group by ano
order by ano;
Pivot no SQL Server
 2000

Figura 3: Pivot no SQL Server 2000

Pivot Table na versão 2005

Para essa versão já existe a função pivot dispensando agora a utilização da cláusula group by e deixando o código mais “limpo”.

Listagem 4: Pivot no SQL Server 2005

 
Select ano
         , [1] as Jan
         , [2] as Fev
         , [3] as Mar
         , [4] as Abr
from venda pivot (sum(valor) for mes in ([1],[2],[3],[4])) p
order by 1;
Pivot no SQL Server 2005

Figura 4: Pivot no SQL Server 2005

Conclusão

Pivot Table é um recurso muito interessante principalmente para quem trabalha com BI, onde existe a necessidade constante de transformar linhas em colunas para ter uma melhor visualização dos resultados.

Boa sorte a todos e até a próxima.