A veces es necesario transponer columnas en filas o deshacer la tabla pivotante en MySQL. Dado que MySQL no tiene una función para UNPIVOT o REVERSE PIVOT una tabla, debe escribir una consulta SQL para transponer columnas en filas. Aquí se explica cómo deshacer la tabla pivotante en MySQL.
Cómo quitar el pivote de una tabla en MySQL
Supongamos que tiene la siguiente tabla dinámica
mysql>create table data(id int, a varchar(255), b varchar(255), c varchar(255)); mysql>insert into data(id,a,b,c) values(1,'a1','b1','c1'),(2,'a1','b1','c1'); mysql>select * from data; +------+------+------+------+ | id | a | b | c | +------+------+------+------+ | 1 | a1 | b1 | c1 | | 2 | a1 | b1 | c1 | +------+------+------+------+
Digamos que desea deshacer la tabla pivotante en MySQL a lo siguiente.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Lectura adicional: Cómo crear tablas dinámicas dinámicas en MySQL
Anular tabla dinámica en MySQL
Aquí está la consulta para hacer unpivot en SQL. Dado que MySQL no ofrece una función UNPIVOT, debe usar la cláusula UNION ALL para revertir el pivote de una tabla en MySQL.
mysql> select id, 'a' col, a value from data union all select id, 'b' col, b value from data union all select id, 'c' col, c value from data; +------+-----+-------+ | id | col | value | +------+-----+-------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+-------+
En la consulta anterior, básicamente cortamos la tabla original en 3 más pequeñas, una para cada columna a, b, c y luego las agregamos una debajo de la otra usando UNION ALL.
Si desea filtrar filas, puede agregar una cláusula WHERE como se muestra a continuación
mysql> select id, 'a' col, a value from data WHERE condition union all select id, 'b' col, b value from data WHERE condition union all select id, 'c' col, c value from data WHERE condition;
Lectura adicional: Cómo transponer filas a columnas dinámicamente en MySQL
Desafortunadamente, es tedioso, pero es una de las dos únicas formas de descentrar en MySQL. El otro implica hacer una unión cruzada, como se muestra a continuación.
mysql> select t.id, c.col, case c.col when 'a' then a when 'b' then b when 'c' then c end as data from data t cross join ( select 'a' as col union all select 'b' union all select 'c' ) c; +------+-----+------+ | id | col | data | +------+-----+------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+------+
Lectura adicional:Cómo automatizar consultas de tablas dinámicas en MySQL
Puede personalizar la consulta anterior para quitar el pivote de la tabla en MySQL, utilizando la cláusula WHERE. También puede usar una herramienta de informes para trazar el resultado en una tabla. Este es un ejemplo de una tabla creada con Ubiq.
Si desea crear tablas dinámicas, gráficos y paneles desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.