110 likes | 241 Views
SQL Server. Comando PIVOT. O que faz?. Transforma as linhas de uma consulta em colunas. Onde é aplicado?. Em relatórios de comparação em um período de forma agrupada Exemplo: Total vendido dos vendedores. Tabela do banco para exemplo. Uma tabela com campo Codigo,Cliente,Data e Valor_Final.
E N D
SQL Server Comando PIVOT
O que faz? • Transforma as linhas de uma consulta em colunas
Onde é aplicado? • Em relatórios de comparação em um período de forma agrupada • Exemplo: Total vendido dos vendedores
Tabela do banco para exemplo • Uma tabela com campo Codigo,Cliente,Data e Valor_Final.
Resultado usando o comando mais conhecido • Abaixo é o método mais usado onde retorna em linhas o cliente e o mês com o total. Em seguida por programação as colunas são alinhadas no relatório por mês.
Resultado usando o comando PIVOT • Usando o comando PIVOT é possível trazer as linhas que são os meses, elas se transformam em colunas de uma vez.
Comparação dos resultados • Usando o comando GROUP BY • Usando o comando PIVOT
Comando executado • Select Cliente as 'Cliente', [1] as 'jan',[2] as 'fev‘,[3] as 'mar',[4] as 'abr‘,[5] as 'mai',[6] as 'jun‘,[7] as 'jul',[8] as 'ago‘,[9] as 'set',[10] as 'out‘,[11] as 'nov',[12] as 'dez' • FROM (Select MONTH(Data) as Mes, Cliente, Valor_Final FROM Venda WHERE Data>='01/01/2009 00:00:00' AND Data<='12/31/2009 23:59:59‘ ) as vend • PIVOT ( Sum(Valor_Final) FOR Mes IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) ) as pv • ORDER BY Cliente ASC Executa o comando SELECT e monta a estrutura do resultado Busca todos campos usados no comando. Executa o comando PIVOT Resultado que aparecerá nas células Passa o campo que filtra as colunas Estes valores fixos definem o resultado da coluna. Ex: jan=1=[1]
Prós e contras • Prós • Executa em apenas um comando; • É mais rápido pois não há codificação para processar o resultado; • Contras • A estrutura é fixa;
Comando para SQL 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