0

I'm looking for a tip or answer about PIVOT in Mysql.

Because, actually I need to build a stored procedure or SELECT about that. I have to convert dynamic rows to columns between two tables in Mysql.

Is there anybody who knows how to do that?

Thanks.

DELIMITER $
DROP PROCEDURE IF EXISTS SP_PIVOT $
CREATE PROCEDURE SP_PIVOT(
        IN unidad_documental INT(11))
BEGIN
DECLARE CADENA VARCHAR(2000);
DECLARE _ESTRUCTURA VARCHAR(250);
DECLARE _METADATO VARCHAR(250);
DECLARE _end INT DEFAULT 0;
DECLARE CANTIDAD_ESTRUCTURAS INT;
DECLARE i INT DEFAULT 0;
DECLARE _CURSOR CURSOR FOR 
SELECT 
REPLACE(e.DESCRIPCION," ",'_') AS ESTRUCTURA, 
m.VALOR 
from estructura e 
inner join metadata m on m.id_estructura = e.id_estructura 
where e.id_unidad_documental = 1 ORDER BY M.ID_DOCUMENTO ASC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _end = 1;
SELECT COUNT(*) INTO CANTIDAD_ESTRUCTURAS FROM ESTRUCTURA WHERE ID_UNIDAD_DOCUMENTAL = 1; 
DROP TABLE IF EXISTS TBL_PIVOT_TEMPORAL;
CREATE TEMPORARY TABLE TBL_PIVOT_TEMPORAL(Campo1 INT, Campo2 VARCHAR(150), Campo3 VARCHAR(250), Campo4 INT(11), Campo5 DECIMAL(12,2));
SET @CADENA = CONCAT('INSERT INTO TBL_PIVOT_TEMPORAL (Campo1,Campo2,Campo3,Campo4,Campo5)
SELECT 
ud.ID_UNIDAD_DOCUMENTAL,
d.NOMBRE,
d.RUTA_ARCHIVO,
d.PAGINAS,
d.TAMANO
from unidad_documental ud
inner join lote l on l.id_unidad_documental = ud.id_unidad_documental
inner join documento d on d.id_lote = l.id_lote
inner join metadata m on m.id_documento = d.id_documento
where ud.id_unidad_documental = 1 ORDER BY D.ID_DOCUMENTO ASC');
PREPARE SENTENCIA FROM @CADENA;
EXECUTE SENTENCIA;
DEALLOCATE PREPARE SENTENCIA;
OPEN _CURSOR;
_BUCLE : LOOP
SET i = i+1;
FETCH _CURSOR INTO _ESTRUCTURA, _METADATO;
IF _end = 1 THEN  
LEAVE _BUCLE;
END IF;
WHILE(i < CANTIDAD_ESTRUCTURAS) DO
SET @AGREGAR_COLUMNA = CONCAT('ALTER TABLE TBL_PIVOT_TEMPORAL ADD ',_ESTRUCTURA,' VARCHAR(250)');
PREPARE SENTENCIA2 FROM @AGREGAR_COLUMNA;
EXECUTE SENTENCIA2;
DEALLOCATE PREPARE SENTENCIA2;
END WHILE;
END LOOP;
CLOSE _CURSOR;
SELECT * FROM TBL_PIVOT_TEMPORAL GROUP BY Campo2 LIMIT 100;
END
$
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
  • Welcome to Stack Overflow. SO is a place to get help with queries or programming tasks which you are actively trying to solve. That being said, can you share a query with us with which you are having some trouble? – Tim Biegeleisen Oct 17 '16 at 20:07
  • Hello, just now i've eddited my post. There is my code but I want to convert rows to column once in a loop. – Giuseppe Manuel Mantilla Monte Oct 18 '16 at 15:15

0 Answers0