MariaDB - convertir registros duplicados a columnas en una sabana de reporte en MariaDB

 
Vista:
sin imagen de perfil
Val: 10
Ha mantenido su posición en MariaDB (en relación al último mes)
Gráfica de MariaDB

convertir registros duplicados a columnas en una sabana de reporte en MariaDB

Publicado por Ron (2 intervenciones) el 26/11/2020 20:53:50
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;
24.11.2020_t_indicador_variables
entonces cada ves que se repita esa llave secundaria, se agregarían 4 columnas a lo largo del reporte:
24.11.2020_reporte
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:
25.11.2020_codigo
25.11.2020_codigo_2
Saludos cordiales...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 10
Ha mantenido su posición en MariaDB (en relación al último mes)
Gráfica de MariaDB

convertir registros duplicados a columnas en una sabana de reporte en MariaDB

Publicado por Ron (2 intervenciones) el 27/11/2020 03:23:16
Aqui esta el codigo de la imagen de arriba:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar