? En SQL , una tabla dinámica es un conjunto de datos que se transforma a partir de un conjunto de filas separadas a una colección de columnas . En las bases de datos relacionales, como Microsoft SQL Server, Oracle y MySQL, las tablas pivote se pueden utilizar para simplificar muchos datos con el fin de facilitar su lectura y comprensión . Para crear una tabla dinámica , un agregado se utiliza en contra de un conjunto de datos para distribuir múltiples filas de una sola columna en una sola fila con múltiples columnas . Esto esencialmente hace pivotar el conjunto de resultados de lado . Datos de ejemplo
Para entender mejor una tabla dinámica , un ejemplo de algunos datos de las ventas en esta lista. Copie el siguiente en Microsoft SQL Server Management Studio para probar los ejemplos.
Crear tabla # PivotTestTable ( CustName varchar ( 8 ) , ITEM_TYPE varchar ( 8 ) , Item_Amount numérico ( 6,2 ))
< p> insert into # PivotTestTableselect 'Jason ', ' PC' , 435.34unionselect 'Jason ', ' Software ' , 243.54unionselect 'Jason ', ' monitor' , 158.23unionselect ' Alison ', ' PC' , 345.89unionselect ' Alison ' , 'Software ' , 78.78unionselect ' Alison ', ' monitor' , 123.45
partir de datos anule la dinamización
Cuando la tabla temporal , # PivotTestTable , se realiza una consulta , el resultado es lo siguiente.
CustName ITEM_TYPE Item_Amount -------- -------------------- Alison Computer 345.89Alison monitor 123.45Alison Software 78.78Jason Computer 435.34Jason monitor 158.23Jason Software 243.54
Como puede ver , el conjunto de resultados muestra dos clientes, Alison y Jason , que han adquirido tres tipos diferentes de productos . Hay seis filas de datos para dos clientes . Si queremos ver los datos en una sola fila por cliente , usaríamos una tabla dinámica para lograr el resultado deseado.
Pivot por la función Pivot
Microsoft SQL Server tiene una función de pivote integrado en SQL Server. Aquí hay un ejemplo con los datos # PivotTestTable .
SELECTCustName como Total_Sales_By_Cust , ordenador , monitor, SoftwareFROM ( SELECTCustName , ITEM_TYPE , Item_AmountFROM # PivotTestTable ) aPIVOT ( suma ( Item_Amount ) PARA ITEM_TYPE in ( ordenador , monitor, software ) ) b
Esta consulta devolverá las seis filas originales pivota en dos filas con columnas separadas para cada tipo de artículo vendido . El conjunto de resultados generados a partir de esta consulta está aquí :
Total_Sales_By_Cust Software Monitor de ordenador ------------------- ----------- --------------- Alison 345.89 123.45 435.34 158.23 243.54 78.78Jason
Pivot por Case agregado Declaración
mediante el uso de un agregado función ( sUM , AVG , MIN , MAX ) en torno a una declaración de caso en una consulta SQL , que son capaces de lograr el mismo resultado que la función de pivote con menos trabajo .
SELECTCustName como Total_Sales_By_Cust , suma ( caso ITEM_TYPE cuando ' Computer' luego terminar Item_Amount ) como Informática , suma ( caso ITEM_TYPE cuando el entonces extremo Item_Amount ' monitor' ) como monitor, suma ( caso ITEM_TYPE al ' software ' y luego final Item_Amount ) como SoftwareFROM # PivotTestTableGROUP POR CustName
consulta devolverá exactamente el mismo conjunto de resultados del ejemplo anterior y es sólo una preferencia por el tipo de giro de usar.
error común con las tablas dinámicas
común error al crear una tabla dinámica es crear una unión detrás en la tabla de origen . Esto producirá resultados poco fiables y se debe evitar . Este ejemplo es estrictamente un ejemplo de lo que no se debe hacer . El resultado de este ejemplo será el mismo , pero la muestra no va a funcionar en todos los casos
SELECTp1.CustName , p1.Item_Amount como Computer, p2.Item_Amount como Monitor, p3.Item_Amount como SoftwareFROM p1INNER # PivotTestTable . ÚNETE p1.CustName p2on # PivotTestTable = p2.CustNameand p2.Item_Type = ' Monitor'INNER ÚNETE p1.CustName p3on # PivotTestTable = p3.CustNameand p3.Item_Type =' Software'WHERE p1.Item_Type = ' PC'
< br >