deseo encontrar solución a este desafío:
tengo una tabla con un campo llave secundaria 'cve_t_indicador', el cual se puede duplicar n...veces;
https://drive.google.com/file/d/1bOStfXj0sQgw8wp136BwA2qMrJ-lefoL/view?usp=sharing
entonces cada ves que se repita esa llave secundaria, se agregarían 4 columnas a lo largo del reporte:
https://drive.google.com/file/d/1B8JI_ciYt9X3FLZ8JL9hPU5xMA-Id_G7/view?usp=sharing
teniendo en cuenta que los campos entre la tabla y el reporte serian estos:
NOM_V1=nombre_variable,DESC_V1=descripcion_variable,UM_V1=unidad_medida, FUENTE_V1=fuente
Por ejemplo: si la llave ('cve_t_indicador' = '1') se repitiera 4 veces en la tabla, entonces en el reporte arrojaria un solo registro o fila, y 16 columnas a lo largo del reporte marcado con el numero consecutivo de la variable:
NOM_V1, DESC_V1, UM_V1, FUENTE_V1
NOM_V2, DESC_V2, UM_V2, FUENTE_V2
NOM_V3, DESC_V3, UM_V3, FUENTE_V3
NOM_V4, DESC_V4, UM_V4, FUENTE_V4
para que al final se genere el reporte con 1 solo registro llave primaria y una secundaria y los duplicados como columnas a lo largo de la sabana del reporte...al final arrojaría 6 registros la consulta descartando los registros duplicados de filas a columnas.
aqui esta el codigo que llevo:
https://drive.google.com/file/d/1ooftNquqzTZvWqCGhCG-kKBSnNrDeIN9/view?usp=sharing
https://drive.google.com/file/d/1SzmC4_-Z8nD3q-JNdf415ah_pCN5tQgE/view?usp=sharing
Saludos cordiales...
tengo una tabla con un campo llave secundaria 'cve_t_indicador', el cual se puede duplicar n...veces;
https://drive.google.com/file/d/1bOStfXj0sQgw8wp136BwA2qMrJ-lefoL/view?usp=sharing
entonces cada ves que se repita esa llave secundaria, se agregarían 4 columnas a lo largo del reporte:
https://drive.google.com/file/d/1B8JI_ciYt9X3FLZ8JL9hPU5xMA-Id_G7/view?usp=sharing
teniendo en cuenta que los campos entre la tabla y el reporte serian estos:
NOM_V1=nombre_variable,DESC_V1=descripcion_variable,UM_V1=unidad_medida, FUENTE_V1=fuente
Por ejemplo: si la llave ('cve_t_indicador' = '1') se repitiera 4 veces en la tabla, entonces en el reporte arrojaria un solo registro o fila, y 16 columnas a lo largo del reporte marcado con el numero consecutivo de la variable:
NOM_V1, DESC_V1, UM_V1, FUENTE_V1
NOM_V2, DESC_V2, UM_V2, FUENTE_V2
NOM_V3, DESC_V3, UM_V3, FUENTE_V3
NOM_V4, DESC_V4, UM_V4, FUENTE_V4
para que al final se genere el reporte con 1 solo registro llave primaria y una secundaria y los duplicados como columnas a lo largo de la sabana del reporte...al final arrojaría 6 registros la consulta descartando los registros duplicados de filas a columnas.
aqui esta el codigo que llevo:
https://drive.google.com/file/d/1ooftNquqzTZvWqCGhCG-kKBSnNrDeIN9/view?usp=sharing
https://drive.google.com/file/d/1SzmC4_-Z8nD3q-JNdf415ah_pCN5tQgE/view?usp=sharing
Código (sql) [Seleccionar]
DELIMITER $$
CREATE PROCEDURE sp_AlterTable()
BEGIN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbName' AND
TABLE_NAME = 'email_subscription' AND
COLUMN_NAME = 'subscribe_all') THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category VARCHAR(512) DEFAULT NULL;
END IF;
END $$
DELIMITER ;
DELIMITER $$
DROP PROCEDURE IF EXISTS sp_AlterTable;
CREATE OR REPLACE PROCEDURE sp_AlterTable()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cve_t_indicador_variable INT;
DECLARE _cve_t_indicador INT;
DECLARE _nombre_variable VARCHAR(200);
DECLARE _descripcion_variable VARCHAR(500);
DECLARE _unidad_medida VARCHAR(100);
DECLARE _fuente VARCHAR(500);
DECLARE _i INT;
DROP TABLE IF EXISTS tempReporte;
CREATE TEMPORARY TABLE IF NOT EXISTS tempReporte
SELECT cve_t_indicador_variable, cve_t_indicador, nombre_variable, descripcion_variable, unidad_medida, fuente
FROM t_indicador_variables
-- WHERE cve_t_indicador
DECLARE _variables CURSOR FOR
SELECT * FROM tempReporte
-- GROUP BY cve_t_indicador;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET i = 0;
OPEN _variables;
LOOP
read_loop: LOOP
FETCH _variables INTO _cve_t_indicador_variable, _cve_t_indicador, _nombre_variable, _descripcion_variable, _unidad_medida, _fuente;
IF done THEN
LEAVE read_loop;
END IF;
IF cve_t_indicador = i THEN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'devms031_2a_SEPTIEMBRE_2020' AND
TABLE_NAME = 'tempReporte' AND
COLUMN_NAME = @i) THEN
ALTER TABLE t_indicador_variables
ADD COLUMN NOM_V + @i VARCHAR(200),
ADD COLUMN DESC_V + @i VARCHAR(500),
ADD COLUMN UM_V + @i VARCHAR(100),
ADD COLUMN FUENTE_V + @i VARCHAR(500);
END IF;
INSERT INTO tempReporte ( NOM_V, DESC_V, UM_V, FUENTE_V) (SELECT _nombre_variable, _descripcion_variable, _unidad_medida, _fuente FROM tempReporte)
END IF;
END LOOP;
SET i = i + 1;
CLOSE _variables;
END $$
DELIMITER ;
-- --------------------------------------------------------------------------------------------------------
call sp_AlterTable
Saludos cordiales...