Bancos de dados relacionais armazenam enormes quantidades de dados na forma de tabelas. Essas tabelas podem ter qualquer número de linhas e colunas. Mas e se você tivesse que alterar os dados em nível de linha para dados colunares? Bem, neste artigo sobre SQL Pivot, mostrarei como você pode converter linhas em uma coluna em um SQL Server.
Os seguintes tópicos serão abordados neste artigo:
- O que é PIVOT em SQL?
- Sintaxe
- Exemplo
- Funcionamento da Cláusula PIVOT
- SQL UNPIVOT
O que é PIVOT em SQL?
PIVOT é usado para girar o valor da tabela convertendo os valores exclusivos de uma única coluna em várias colunas. Ele é usado para girar as linhas para valores de coluna e executa agregações quando necessário nos valores de coluna restantes.
UNPIVOT, por outro lado, é usado para realizar as operações opostas. Portanto, é usado para converter as colunas de uma tabela específica em valores de coluna.
Continuando neste artigo, vamos entender a sintaxe do SQL Pivot.
Sintaxe:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Aqui, você também pode usar a cláusula ORDER BY para classificar os valores em ordem crescente ou decrescente. Agora que você sabe o que é PIVOT em SQL e sua sintaxe básica, vamos avançar e ver como usá-lo.
Exemplos
Para sua melhor compreensão, considerarei a tabela a seguir para explicar todos os exemplos.
Tabela de fornecedores:
ID do fornecedor | Dias de fabricação | Custo | CustomerID | PurchaseID |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Vamos escrever uma consulta simples para recuperar o custo médio gasto por cada cliente.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Saída:
CustomerID | AverageCostofCustomer |
11 | 1787,75 |
22 | 4654 |
33 | 5238,33 |
Agora, digamos que queremos pivotar a tabela acima. Aqui, os valores da coluna CustomerID se tornarão os cabeçalhos das colunas.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Saída:
Cost_According_To_Customers | 11 | 22 | 33 |
Custo Médio do Cliente | 1787,75 | 4654 | 5238,33 |
Observação: Quando você usa funções agregadas com PIVOT, valores nulos não são considerados ao calcular uma agregação.
Bem, esse foi um exemplo básico, mas vamos agora entender como funcionava a cláusula PIVOT.
Funcionamento da cláusula PIVOT
Como você pode consultar acima, para criar uma TABELA PIVOT, você precisa seguir os passos abaixo:
- Selecione colunas para dinamizar
- Em seguida, selecione uma tabela de origem.
- Aplique o operador PIVOT e, em seguida, use as funções agregadas.
- Mencione valores dinâmicos.
Selecione colunas para dinamizar
Inicialmente, temos que especificar os campos a serem incluídos em nossos resultados. Em nosso exemplo, considerei a coluna AverageCostofCustomer na tabela dinâmica. Em seguida, criamos três outras colunas com os cabeçalhos de coluna 11, 22 e 33. Exemplo-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Selecione a tabela de origem
Em seguida, você deve especificar a instrução SELECT que retornará os dados de origem para a tabela dinâmica. Em nosso exemplo, estamos retornando o CustomerID e Cost da tabela Suppliers.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Aplique o operador PIVOT e, em seguida, use as funções agregadas
Em seguida, você deve especificar a função de agregação a ser usada durante a criação da tabela dinâmica. Em nosso exemplo, usei a função AVG para calcular o custo médio.
PIVOT ( AVG(Cost)
Mencionar valores dinâmicos
Finalmente, você deve mencionar os valores que devem ser incluídos na tabela dinâmica resultante. Esses valores serão usados como cabeçalhos de coluna na tabela dinâmica.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
É assim que os operadores PIVOT funcionam. Continuando neste artigo sobre SQL PIVOT, vamos entender como ele é diferente do SQL UNPIVOT.
SQL UNPIVOT
O operador SQL UNPIVOT é usado para realizar a operação oposta à do PIVOT. Ele é usado para girar os dados da coluna em dados no nível da linha. A sintaxe do UNPIVOT é semelhante à do PIVOT. A única diferença é que você precisa usar a palavra-chave SQL “UNPIVOT” .
Exemplo:
Vamos criar uma tabela com as colunas SupplierID, AAA, BBB e CCC. Além disso, insira alguns valores.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Saída:
ID do fornecedor | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Agora, digamos que queremos desarticular a tabela. Para fazer isso, você pode consultar o seguinte código:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
ID do fornecedor | Clientes | Produtos |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
É assim que você pode usar o SQL PIVOT e UNPIVOT. Com isso, encerramos este artigo. Espero que você tenha entendido, como usar SQL. Se você deseja aprender mais sobre o MySQL e conhecer esse banco de dados relacional de código aberto, confira nosso Treinamento de certificação de DBA MySQL que vem com treinamento ao vivo conduzido por instrutor e experiência de projeto na vida real. Este treinamento ajudará você a entender o MySQL em profundidade e a dominar o assunto.
Tem alguma pergunta para nós? Mencione-o na seção de comentários deste artigo sobre SQL Pivot e entrarei em contato com você.