PIVOT no SQL Server parte I

Olá Caríssimos tudo bem ?

Neste post estarei mostrando como é simples realizar uma consulta para gerar um  resultado que seria como uma tabela de referência cruzada (pivot table, transposição de tabela, tabela dinâmica, etc) no SQL Server.

Vamos dividir o post em duas partes, nesta vamos fazer algo simples e no próximo post faremos algo mais avançado.

Uma referência cruzada ou Pivot Table é necessária quando queremos efetuar uma transposição nos dados, realizando algum cálculo (ou não).

Imagine o seguinte: Temos uma tabela com todas as vendas por marca e por cidade e desejamos exibir os resultados colocando as marcas como linhas e as cidades como colunas, assim cada marca terá somente uma linha na consulta final. Assim deixamos o resultado mais resumido e de fácil visualização.

A tabela

Nossa tabela VENDAS tem o layout assim:

Como citei anteriormente queremos visualizar as cidades como colunas e o layout final ficará assim:

Pra fazer isso é muito, muito simples, abra a query no SQL Server e siga o mesmo caminho abaixo:

Select Marca,[São Paulo],[Rio de Janeiro],[Salvador],[Tarabai],[Campina Grande]
 from
 (
 Select Marca,Cidade,TotalVendido from vendas
 ) PT

PIVOT
 ( SUM(TotalVendido) for Cidade in ([São Paulo],[Rio de Janeiro],[Salvador],[Tarabai],[Campina Grande])) pvt

Análise

1 – Observe que fiz uma subquery e dei o nome de PT, podíamos ter adicionado até uma função agregada. O importante é esta query ter todas as colunas que precisamos.

2 – Depois foi só utilizar o PIVOT para agregar os dados e colocar as linhas como colunas.

É SÓ ISSO!!!

Basta adaptar pra sua necessidade.

Você deve estar questionando  OK. E se minhas colunas forem dinâmicas, se variarem dependendo de um filtro ?

A resposta será dada no próximo POST (PIVOT no Sql Server parte II) .

abraço a todos!!!

Anúncios

, , , , , ,

  1. #1 por Marcos Felipe em 11 de dezembro de 2013 - 11:36 am

    Ocorreu um erro:

    O nome ‘Select valor,[MOTOR_DIESEL],[TRANSMISSÃO] From (Select description,valor,workhour From #ChartComponents) PT PIVOT (sum(workhour) For description in ([MOTOR_DIESEL],[TRANSMISSÃO])) pvt’ não é um identificador válido.

  1. PIVOT no SQL Server parte II « debulhado…
  2. PIVOT no SQL Server parte I « debulhado…
  3. UNPIVOT no SQL Server « debulhado…

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: