Ocasionalmente, para fins de relatório ou visualização, podemos precisar de uma visão invertida dos dados, colocando linhas como colunas. Principalmente em tabelas que envolvem dados temporais, como tabelas de vendas ou pedidos.
Segue abaixo um scrip devidamente comentado com um exemplo de inversão.
Primeiro vamos criar uma tabela chamada VENDAS:
create table vendas (data datetime, valor numeric(9,2))
GO
Vamos inserir alguns dados fictícios:
insert vendas values ('2009-04-17 15:25:54.090', 10)
insert vendas values ('2009-03-17 15:25:54.090', 20)
insert vendas values ('2009-02-17 15:25:54.090', 26.32)
insert vendas values ('2008-01-17 15:25:54.090', 32)
insert vendas values ('2008-12-17 15:25:54.090', 99)
insert vendas values ('2008-11-17 15:25:54.090', 54)
insert vendas values ('2008-11-17 15:25:54.090', 65.65)
insert vendas values ('2007-10-17 15:25:54.090', 98.65)
insert vendas values ('2007-09-17 15:25:54.090', 32.45)
insert vendas values ('2007-09-17 15:25:54.090', 98.65)
insert vendas values ('2006-04-17 15:25:54.090', 23.65)
Aqui realizamos o select, agrupando os dados por mês/ano e somando os valores:
select year(data) as ano
,mes_1 = sum(case when month(data)=1 then valor end)
,mes_2 = sum(case when month(data)=2 then valor end)
,mes_3 = sum(case when month(data)=3 then valor end)
,mes_4 = sum(case when month(data)=4 then valor end)
,mes_5 = sum(case when month(data)=5 then valor end)
,mes_6 = sum(case when month(data)=6 then valor end)
,mes_7 = sum(case when month(data)=7 then valor end)
,mes_8 = sum(case when month(data)=8 then valor end)
,mes_9 = sum(case when month(data)=9 then valor end)
,mes_10 = sum(case when month(data)=10 then valor end)
,mes_11 = sum(case when month(data)=11 then valor end)
,mes_12 = sum(case when month(data)=12 then valor end)
from vendas
group by year(data)
order by year(data)
Futuramente vamos exemplicar o uso do comando pivot, funcionalidade disponibilizada a partir do SQL Server 2005.
sexta-feira, 17 de abril de 2009
Pivoteando colunas no Sql Server
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário
Leave your comment here!