Transponer una fila en columnas con MySQL sin necesidad de utilizar los sindicatos?

StackOverflow https://stackoverflow.com/questions/1851781

  •  13-09-2019
  •  | 
  •  

Pregunta

Tengo una tabla que es similar a la de abajo siguiente:

       id |        cat |         one_above |        top_level | 
        0    'printers'          'hardware'        'computers'

Quiero ser capaz de escribir una consulta, sin utilizar uniones , que me va a devolver un conjunto de resultados que transpone las columnas de esta tabla en filas. Lo que esto significa, es que quiero que el resultado sea:

       id |          cat |
        0      'printers'
        0      'hardware'
        0     'computers'

Es esto posible en MySQL? No puedo bajar a la capa de aplicación y llevar a cabo esto porque estoy alimentando estos en un motor de búsqueda que le índice basado en el id. Varios otros DBMS tienen algo así como pivote y UNPIVOT. Apreciaría cualquier penetración a algo que me falta.

Mahmoud

P.S.

Estoy pensando en volver a la normalización de la base de datos como última opción, ya que esta no será una tarea trivial.

Gracias!

¿Fue útil?

Solución

Tengo esta fuera del libro El arte de SQL , páginas 284-286:

Digamos que su nombre de la tabla es foo.

En primer lugar, crear una tabla llamada pivot:

CREATE Table pivot (
  count int
);

Insertar en el que las tablas tantas filas como columnas que desea girar en foo. Puesto que usted tiene tres columnas en foo que desea girar, crear tres filas de la tabla dinámica:

insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);

Ahora hacer una combinación cartesiana entre foo y pivot, utilizando un CASE para seleccionar la columna correcta en función del recuento:

SELECT foo.id, Case pivot.count
  When 1 Then cat
  When 2 Then one_above
  When 3 Then top_level
End Case
FROM foo JOIN pivot;

Esto debe darle lo que quiere.

Otros consejos

Después de algunos bastante extensa excavación tropecé en esta página que puede o no puede contener su respuesta. Es una tarea difícil en MySQL pero desde un punto de vista conceptual que puede construir una consulta que transponer esta manera el uso de describir (aunque probablemente realizar horrible). Así que estoy seguro de que podemos encontrar una manera de hacerlo de la manera correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top