Segue um exemplo de como utilizar a nova função de PIVOT do SQL Server 2005
Crie uma tabela e popule os valores de produto/mes.
use AdventureWorks
go
set nocount on
go
drop table foo
go
create table foo (Produto int, Mes int , Valor money)
go
insert foo values (1,1,20)
insert foo values (1,2,10)
insert foo values (1,3,10)
insert foo values (2,1,200)
insert foo values (2,2,100)
insert foo values (2,3,100)
go
Mostra a tabela produtos e valores mês a mês:
select * from foo
Produto Mes Valor
1 1 20,00
1 2 10,00
1 3 10,00
2 1 200,00
2 2 100,00
2 3 100,00
Utilizando o método atual do SQL Server 2000 para pivotar a tabela com SELECT, CASE e SUM utilizamos o código abaixo:
select Produto,
sum(case Mes when 1 then Valor else 0 end) as Jan,
sum(case Mes when 2 then Valor else 0 end) as Fev,
sum(case Mes when 3 then Valor else 0 end) as Mar
from foo
group by Produto
Temos o resultado abaixo:
Produto Jan Fev Mar
1 20,00 10,00 10,00
2 200,00 100,00 100,00
Com a nova função PIVOT do SQL Server 2005 não precisamos utilizar o SELECT, CASE e SUM. Segue o código do SQL Server 2005 para produzir o mesmo resultado anterior:
select Produto,[1] as Jan, [2] as Fev,[3] as Mar
from
(select Valor,Mes,Produto
from foo) p
PIVOT
(
sum(Valor)
for Mes in ([1],[2],[3])
) as foo
Temos o mesmo resultado:
Produto Jan Fev Mar
1 20,00 10,00 10,00
2 200,00 100,00 100,00