- Categorias:
UNPIVOT¶
Gira uma tabela transformando colunas em linhas. UNPIVOT é um operador relacional que aceita duas colunas (de uma tabela ou subconsulta), juntamente com uma lista de colunas, e gera uma linha para cada coluna especificada na lista. Em uma consulta, ela é especificada na cláusula FROM após o nome da tabela ou subconsulta.
UNPIVOT não é exatamente o contrário de PIVOT, pois não pode desfazer as agregações feitas por PIVOT.
Este operador pode ser usado para transformar uma tabela larga (por exemplo, empid, jan_sales, feb_sales, mar_sales) em uma tabela mais estreita (por exemplo, empid, month, sales).
- Consulte também:
Sintaxe¶
Parâmetros¶
{ INCLUDE | EXCLUDE } NULLSEspecifica se deve incluir ou excluir linhas com NULLs no
name_column:INCLUDE NULLSinclui linhas com NULLs.EXCLUDE NULLSexclui linhas com NULLs.
Padrão:
EXCLUDE NULLSvalue_columnO nome a ser atribuído à coluna gerada que será preenchida com os valores das colunas da lista de colunas.
name_columnO nome a ser atribuído à coluna gerada que será preenchida com os nomes das colunas na lista de colunas.
column_listOs nomes das colunas na tabela ou subconsulta de origem que serão giradas em uma única coluna pivô. Os nomes das colunas irão preencher
name_column, e os valores das colunas irão preenchervalue_column.O
column_listpode conter apenas nomes de colunas literais, não uma subconsulta.As colunas em
column_listdevem ter exatamente o mesmo tipo de dados, com as seguintes exceções:Os tipos de dados para cadeias de caracteres de texto podem ter comprimentos diferentes.
Se as colunas contiverem cadeias de caracteres de texto, colunas diferentes poderão usar tipos de dados diferentes para o texto. Por exemplo, a lista pode incluir uma coluna VARCHAR e uma coluna CHAR.
[ AS ] col_aliasEspecifica o alias da coluna a ser usado no resultado da UNPIVOT Operação em vez dos nomes originais das colunas. Você não pode usar aliases diferentes para o mesmo nome de coluna. No entanto, você não pode usar o mesmo alias para vários nomes de colunas. A palavra-chave AS é opcional.
Notas de uso¶
Não é possível usar uma junção LATERAL para fazer referência direta ao conjunto de resultados de uma operação UNPIVOT. A tentativa de fazer isso retorna um erro. Como alternativa, materialize o resultado de UNPIVOT primeiro em uma tabela temporária e depois faça referência a essa tabela na junção LATERAL. Para criar e carregar a tabela
monthly_salesselecionada neste exemplo, consulte a seção de exemplos.A consulta a seguir não funciona porque LATERAL não pode fazer referência a um resultado de UNPIVOT definido diretamente:
A seguinte instrução CREATE TEMPORARY TABLE cria uma tabela temporária para materializar o resultado de UNPIVOT. A consulta que segue essa instrução faz referência à tabela temporária na junção LATERAL:
Exemplos¶
Crie uma tabela, monthly_sales, com a seguinte estrutura e dados:
Desarticule as colunas individuais do mês para retornar um único valor sales por month para cada funcionário.
O exemplo a seguir é o mesmo que o exemplo anterior, mas usa aliases para os nomes das colunas:
A anterior SELECT As instruções excluem NULLs por padrão. Portanto, não incluem nos resultados uma linha de eletrodomésticos em fevereiro. Para incluir NULLs nos resultados, execute a seguinte instrução SQL:
Esta saída inclui uma linha para eletrodomésticos em fevereiro.
Em vez de selecionar todas as colunas com *, é possível incluir colunas específicas na lista SELECT e referenciar UNPIVOT value_column e name_column. O exemplo a seguir é semelhante ao exemplo anterior, mas especifica value_column sales e name_column month na lista SELECT. A consulta exclui a coluna empid: