PIVOT do SQL Server

Resumo: neste tutorial, você aprenderá a usar o operador PIVOT do SQL Server para converter linhas em colunas.

Configurando as metas

Para a demonstração, usaremos production.products e production.categories tabelas do banco de dados de exemplo:

A consulta a seguir encontra o número de produtos para cada categoria de produto:

Aqui está a saída:

Nosso objetivo é transformar os nomes das categorias da primeira coluna da saída em várias colunas e contar o número de produtos para cada uma nome da categoria como a seguinte imagem:

Além disso, podemos adicionar o ano do modelo para agrupar a categoria ory por ano do modelo, conforme mostrado na seguinte saída:

Introdução ao operador PIVOT do SQL Server

O operador PIVOT do SQL Server gira uma expressão com valor de tabela. Ele transforma os valores exclusivos em uma coluna em várias colunas na saída e realiza agregações em quaisquer valores de coluna restantes.

Você segue estas etapas para tornar uma consulta uma tabela dinâmica:

  • Primeiro, selecione um conjunto de dados base para dinamização.
  • Segundo, crie um resultado temporário usando uma tabela derivada ou expressão de tabela comum (CTE)
  • Terceiro, aplique o PIVOT.

Vamos aplicar essas etapas no exemplo a seguir.

Primeiro, selecione o nome da categoria e o id do produto em production.products e production.categories tabelas como dados básicos para dinamização:

Em segundo lugar, crie um conjunto de resultados temporário usando uma tabela derivada:

Terceiro, aplique o operador PIVOT:

Esta consulta gera a seguinte saída:

Agora, qualquer coluna adicional que você adicionar à lista de seleção da consulta que retorna o base os dados formarão grupos de linhas automaticamente na tabela dinâmica. Por exemplo, você pode adicionar a coluna do ano do modelo à consulta acima:

Aqui está a saída:

Gerando valores de coluna

Na consulta acima, você tinha que digitar cada nome de categoria entre parênteses após o IN operador manualmente. Para evitar isso, você pode usar a função QUOTENAME() para gerar a lista de nomes de categorias e copiá-los sobre a consulta.

Primeiro, gere a lista de nomes de categorias:

A saída será semelhante a esta:

Neste trecho:

  • A função QUOTENAME() envolve o nome da categoria pelos colchetes, por exemplo,
  • A função LEFT() remove a última vírgula da string @columns .

Em segundo lugar, copie a lista de nomes de categoria da saída e cole-a na consulta.

Tabelas dinâmicas dinâmicas

Se você adicionar um novo nome de categoria para a tabela production.categories, você precisa reescrever sua consulta, o que não é ideal. Para evitar isso, você pode usar SQL dinâmico para tornar a tabela dinâmica dinâmica.

Nesta consulta, em vez de passar uma lista fixa de nomes de categorias para o PIVOT operador, construímos a lista de nomes de categoria e a passamos para uma instrução SQL e, em seguida, executamos essa instrução dinamicamente usando o procedimento armazenado sp_executesql.

Neste tutorial , você aprendeu a usar a tabela PIVOT do SQL Server para converter linhas em colunas.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *