Transponer multiples registros como columnas
Posted by:
werwer w
Date: September 08, 2013 11:59AM
Tengo esta tabla sencilla de tipo campo-valor. He resumido el problema a una tabla que solo almacena tres valores distintos para 'campo' (superficie, habitaciones y garaje), pero la tabla real contiene mas posibles valores (descripcion, tipo, operacion, precio, planta, ascensor, etc). Es para viviendas de inmobiliarias, todas las viviendas tienen los mismos valores de campos, y el id identifica a cada vivienda y es unico y autoincremental.
La tabla ORIGINAL es esta:
id campo valor
1 superficie 55
1 habitaciones 2
1 garaje NO
2 superficie 75
2 habitaciones 3
2 garaje SI
3 superficie 100
3 habitaciones 4
3 garaje NO
Lo que quiero es muy simple pero para mis conocimientos muy complejo. Solo necesito mostrar el listado de todas las viviendas con sus caracteristicas, pero con los nombres de los campos como nombres de columnas, o sea, trasponiendo la tabla, lo que en SQL Server de MS se conoce como PIVOT y que en MySQL creo que no existe. He encontrado algunas soluciones pero solo sirven para tablas con dos valores por vivienda (baños y superficie, ó bien superficie y habitaciones, pero no mas de dos), y yo necesito adaptar esta solucion para que me salgan todos los campos de cada vivienda, de esta forma:
TABLA RESULTADO QUE BUSCO:
id superficie habitaciones garaje ... etc, los que sean
1 55 2 NO
2 75 3 SI
3 100 4 NO
El SQL que funciona para dos valores (superficie y habitaciones) es este::
SELECT
t1.ID,
t1.valor AS superficie,
t2.habitaciones
FROM tabla AS t1
INNER JOIN (
SELECT
ID,
valor AS habitaciones
FROM tabla
WHERE campo='habitaciones'
) AS t2
ON t1.ID=t2.ID AND t1.campo='superficie'
Y muestra esta TABLA QUE LO RESUELVE A MEDIAS:
id superficie habitaciones
1 55 2
2 75 3
3 100 4
LA PREGUNTA ES: Cómo añadir mas sentencias para que resuelva el problema con mas valores de 'campo'.
PREGUNTA ALTERNATIVA: Si esta no sirve, ¿hay otras sentencias que me lo resuelvan igualmente?.
Mil gracias de verdad por el tiempo y la atención.