-
¿Qué es una tabla dinámica en SQL?
-
En SQL, una tabla dinámica es un conjunto de datos que se transforma de una colección 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 la gran cantidad de datos con el fin de que sea más fácil de leer y entender. Para crear una tabla dinámica, un agregado se utiliza en contra de un conjunto de datos para distribuir varias filas de una sola columna en una sola fila con varias columnas. Esta gira esencialmente el conjunto de resultados de lado.Data de muestra
Para entender mejor una tabla dinámica, un ejemplo de algunos datos de ventas está aquí. Copiar el siguiente en Microsoft SQL Server Management Studio para probar los ejemplos.Crear una tabla #PivotTestTable
(Varchar CustName (8),
ITEM_TYPE varchar (8),
Item_Amount numérico (6,2))insertar en #PivotTestTable
seleccione 'Jason', 'PC', 435.34
Unión
seleccione 'Jason', 'software', 243.54
Unión
seleccione 'Jason', 'Monitor', 158.23
Unión
seleccione 'Alison', 'PC', 345.89
Unión
seleccione 'Alison', 'software', 78.78
Unión
seleccione 'Alison', 'Monitor', 123.45A partir de datos no girados
Cuando se consulta la tabla temporal, #PivotTestTable, el resultado es el siguiente.
CustName item_type Item_Amount
Alison ordenador 345.89
Alison monitor 123,45
Software Alison 78.78
Jason ordenador 435,34
Jason monitor 158.23
Software Jason 243,54Como se puede ver, el conjunto de resultados muestra dos clientes, Alison y Jason, que han adquirido tres diferentes tipos de artículos. Hay seis filas de datos para dos clientes. Si lo que queríamos ver los datos en una sola fila por cliente, usaríamos una tabla dinámica para conseguir el resultado deseado.
Pivote por función de pivote
Microsoft SQL Server tiene una función de pivote integrado en SQL Server. Aquí hay un ejemplo con los datos #PivotTestTable.SELECCIONAR
CustName as Total_Sales_By_Cust,
Computer,
Monitor,
SoftwareDE
(
SELECT
CustName,
Item_Type,
Item_Amount
FROM #PivotTestTable
) aPIVOTE
(
sum(Item_Amount)
FOR Item_Type in (Computer, Monitor,Software)
) bEsta consulta devolverá los originales seis filas articuladas en dos filas con columnas separadas para cada tipo de artículo vendido. El conjunto de resultados generados a partir de esta consulta es aquí:
Software Total_Sales_By_Cust Monitor
Alison 345.89 123.45 78.78
Jason 435.34 158.23 243.54Pivote de estado global del caso
Mediante el uso de una función agregada (SUM, AVG, MIN, MAX) en torno a una declaración de caso en una consulta SQL, somos capaces de lograr el mismo resultado que la función de pivote con menos trabajo.SELECCIONAR
CustName as Total_Sales_By_Cust,
sum(case Item_Type when 'Computer' then Item_Amount end) as Computer,
sum(case Item_Type when 'Monitor' then Item_Amount end) as Monitor,
sum(case Item_Type when 'Software' then Item_Amount end) as SoftwareDE #PivotTestTable
GRUPO POR CustNameEsta consulta devolverá exactamente el mismo conjunto de resultados del ejemplo anterior y es sólo una preferencia por el tipo de pivote para su uso.
El error común con las tablas dinámicas
Un error común para crear una tabla dinámica es crear una copia de combinación en la tabla de origen. Esto producirá resultados poco fiables y debe ser evitado. Este ejemplo es estrictamente un ejemplo de lo que no debe hacer. El resultado en esta muestra será el mismo; sin embargo, este ejemplo no funcionará en todos los casos.SELECCIONAR
p1.CustName,
p1.Item_Amount as Computer,
p2.Item_Amount as Monitor,
p3.Item_Amount as SoftwareDe P1 #PivotTestTable
Combinación interna p2 #PivotTestTableon p1.CustName = p2.CustName
and p2.Item_Type = 'Monitor'Combinación interna p3 #PivotTestTable
on p1.CustName = p3.CustName
and p3.Item_Type = 'Software'DONDE p1.Item_Type = 'PC'