Exemplo
A cláusula PIVOT pode ser usada no SQL Server (Transact-SQL).
Vejamos um exemplo. Se tivéssemos uma tabela de funcionários que contivesse os seguintes dados:
employee_number | last_name | first_name | salário | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Gates | Steve | 65000 | 30 |
E executamos a seguinte instrução SQL que cria uma tabulação cruzada na consulta usando a cláusula PIVOT:
Ele retornaria o seguinte resultado:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Este exemplo criaria uma tabela dinâmica para exibir o salário total de dept_id 30 e dept_id 45. Os resultados são exibidos em uma linha com os dois departamentos aparecendo cada um em sua própria coluna.
Agora, vamos separar a cláusula PIVOT e explicar como ela funcionava.
Especificar colunas em resultados de tabulação cruzada
Primeiro, queremos especificar quais campos incluir em nossos resultados de tabulação cruzada. Neste exemplo, queremos incluir o valor literal “TotalSalary” como a primeira coluna da tabela dinâmica. E queremos criar uma coluna para dept_id 30 e uma segunda coluna para dept_id 45. Isso nos dá 3 colunas em nossa tabela dinâmica.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Especifique a fonte Dados da tabela
Em seguida, precisamos especificar uma instrução SELECT que retornará os dados de origem para a tabela dinâmica.
Neste exemplo, queremos retornar os valores de dept_id e salary de a tabela de funcionários:
(SELECT dept_id, salary FROM employees) AS SourceTable
Você deve especificar um alias para a consulta de origem. Neste exemplo, criamos o alias da consulta como SourceTable.
Especifique a função de agregação
Em seguida, precisamos especificar qual função de agregação usar ao criar nossa consulta de tabulação cruzada. Você pode usar qualquer agregado, como funções SUM, COUNT, MIN, MAX ou AVG.
Neste exemplo, vamos usar a função SUM. Isso somará os valores salariais:
PIVOT(SUM(salary)
Especificar valores dinâmicos
Finalmente, precisamos especificar quais valores dinâmicos incluir em nossos resultados . Eles serão usados como títulos de coluna em nossa consulta de tabulação cruzada.
Neste exemplo, vamos retornar apenas os valores dept_id de 30 e 45. Esses valores se tornarão nossos títulos de coluna em nosso pivô tabela. Além disso, observe que esses valores são uma lista finita dos valores dept_id e não conterão necessariamente todos os valores possíveis.
FOR dept_id IN (, )
Agora, quando colocamos tudo junto, obtemos a seguinte tabela dinâmica:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |