? No SQL , uma tabela dinâmica é um conjunto de dados que é transformada a partir de uma coleção de linhas separadas para uma coleção de colunas . Em bancos de dados relacionais , como o Microsoft SQL Server, Oracle e MySQL, tabelas dinâmicas pode ser usado para simplificar dados extensos , a fim de torná-lo mais fácil de ler e entender. Para criar uma tabela dinâmica , um agregado é usado contra um conjunto de dados para distribuir várias linhas de uma única coluna em uma única linha com várias colunas. Isto essencialmente gira o conjunto de resultados para os lados. Dados de Amostra
para entender melhor uma tabela dinâmica , um exemplo de alguns dados de vendas está listado aqui. Copie o seguinte no Microsoft SQL Server Management Studio para experimentar os exemplos.
Criar tabela # PivotTestTable ( CustName varchar (8), ITEM_TYPE varchar (8), Item_Amount numérico (6,2 ) )
inserir # PivotTestTableselect ' Jason ', ' computador' , 435.34unionselect ' Jason ', ' Software ' , 243.54unionselect ' Jason ', ' monitor' , 158.23unionselect ' Alison ', ' computador' , 345.89unionselect " Alison " , 'Software ' , 78.78unionselect ' Alison ', ' monitor' , 123.45
Iniciando não dinâmica Dados
Quando a tabela temporária , # PivotTestTable , é consultado , o resultado é o seguinte .
CustName ITEM_TYPE Item_Amount -------- -------------------- Alison Computer 345.89Alison monitor 123.45Alison Software 78.78Jason computador 435.34Jason monitor 158.23Jason Software 243,54
Como você pode ver , o conjunto de resultados mostra dois clientes , Alison e Jason , que adquiriram três diferentes tipos de itens. Existem seis linhas de dados para dois clientes . Se quiséssemos ver os dados em uma única linha por cliente , poderíamos usar uma tabela dinâmica para atingir o resultado desejado.
Pivot por função PIVOT
Microsoft SQL Server tem uma função PIVOT construído em SQL Server. Aqui está um exemplo com os dados # PivotTestTable .
SELECTCustName como Total_Sales_By_Cust , Computador, Monitor, SoftwareFROM ( SELECTCustName , ITEM_TYPE , Item_AmountFROM # PivotTestTable ) aPIVOT (soma ( Item_Amount ) PARA ITEM_TYPE em ( computador, monitor, Software) ) b
Esta consulta retornará os seis linhas originais girou em duas linhas com colunas separadas para cada tipo de item vendido. O conjunto de resultados gerados a partir dessa consulta é aqui:
Monitor Software Total_Sales_By_Cust Computer ------------------- ----------- --------------- Alison 345,89 123,45 435,34 158,23 243,54 78.78Jason
Pivot por agregado Caso
Declaração
usando um agregado função ( sUM , AVG, MIN , MAX) em torno de uma exposição do caso em uma consulta SQL , que são capazes de alcançar o mesmo resultado que a função PIVOT com menos trabalho.
SELECTCustName como Total_Sales_By_Cust , sum (case ITEM_TYPE quando ' computador' depois Item_Amount final ), como computador , sum (case ITEM_TYPE quando 'Monitor' , em seguida, Item_Amount final ), como monitor, soma ( caso ITEM_TYPE quando 'Software ', então Item_Amount final ) como SoftwareFROM # PivotTestTableGROUP POR CustName
consulta retornará exatamente o mesmo conjunto do exemplo anterior resultado e é apenas uma preferência por qual tipo de pivô de usar.
Common Mistake com tabelas dinâmicas
comum erro para criar uma tabela dinâmica é a criação de uma junção de volta na tabela de origem . Isto irá produzir resultados pouco fiáveis e deve ser evitada . Este exemplo é estritamente um exemplo do que não fazer. O resultado desta amostra será a mesma , no entanto esta amostra não irá funcionar em todos os casos
SELECTp1.CustName , p1.Item_Amount como Computador, p2.Item_Amount como Monitor, p3.Item_Amount como SoftwareFROM # PivotTestTable p1INNER . Cadastre- # PivotTestTable p2on p1.CustName = p2.CustNameand p2.Item_Type = ' Monitor'INNER Cadastre # PivotTestTable p3on p1.CustName = p3.CustNameand p3.Item_Type =' Software'WHERE p1.Item_Type = ' computador ' em < br >