elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1]
1  Programación / Bases de Datos / convertir registros duplicados a columnas en una sabana de reporte en mariadb en: 27 Noviembre 2020, 02:34 am
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
Código
  1. DELIMITER $$
  2. CREATE PROCEDURE sp_AlterTable()
  3. BEGIN
  4.       IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
  5.                      WHERE TABLE_SCHEMA = 'dbName' AND
  6.                            TABLE_NAME = 'email_subscription' AND
  7.                            COLUMN_NAME = 'subscribe_all') THEN
  8.          ALTER TABLE email_subscription
  9.             ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
  10.             ADD COLUMN subscribe_category VARCHAR(512) DEFAULT NULL;
  11.       END IF;
  12. END $$
  13. DELIMITER ;
  14.  
  15.  
  16.  
  17.  
  18. DELIMITER $$
  19. DROP PROCEDURE IF EXISTS sp_AlterTable;
  20. CREATE OR REPLACE PROCEDURE sp_AlterTable()
  21.  
  22. BEGIN
  23.  
  24.  DECLARE done INT DEFAULT FALSE;
  25. DECLARE cve_t_indicador_variable INT;
  26. DECLARE _cve_t_indicador INT;
  27. DECLARE _nombre_variable VARCHAR(200);
  28. DECLARE _descripcion_variable VARCHAR(500);
  29. DECLARE _unidad_medida VARCHAR(100);
  30. DECLARE _fuente VARCHAR(500);
  31. DECLARE _i INT;
  32.  
  33.  
  34. DROP TABLE IF EXISTS tempReporte;
  35. CREATE TEMPORARY TABLE IF NOT EXISTS tempReporte
  36. SELECT cve_t_indicador_variable, cve_t_indicador, nombre_variable, descripcion_variable, unidad_medida, fuente
  37. FROM t_indicador_variables
  38. -- WHERE cve_t_indicador
  39.  
  40. DECLARE _variables CURSOR FOR
  41.  
  42. SELECT * FROM tempReporte
  43. -- GROUP BY cve_t_indicador;
  44. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  45.  
  46. SET i = 0;
  47.  
  48. OPEN _variables;
  49.  
  50. LOOP
  51. read_loop: LOOP
  52.  
  53. FETCH _variables INTO _cve_t_indicador_variable, _cve_t_indicador,  _nombre_variable, _descripcion_variable, _unidad_medida, _fuente;
  54.  
  55. IF done THEN
  56.        LEAVE read_loop;
  57.       END IF;
  58.  
  59. IF cve_t_indicador = i THEN
  60.  
  61. IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
  62.                      WHERE TABLE_SCHEMA = 'devms031_2a_SEPTIEMBRE_2020' AND
  63.                            TABLE_NAME = 'tempReporte' AND
  64.                            COLUMN_NAME = @i) THEN
  65.          ALTER TABLE t_indicador_variables
  66.             ADD COLUMN NOM_V + @i VARCHAR(200),
  67.             ADD COLUMN DESC_V + @i VARCHAR(500),
  68. ADD COLUMN UM_V + @i VARCHAR(100),
  69. ADD COLUMN FUENTE_V + @i VARCHAR(500);
  70.       END IF;
  71. INSERT INTO tempReporte ( NOM_V, DESC_V, UM_V, FUENTE_V) (SELECT _nombre_variable, _descripcion_variable, _unidad_medida, _fuente FROM tempReporte)
  72. END IF;
  73. END LOOP;
  74.  
  75. SET i = i + 1;
  76.  
  77. CLOSE _variables;
  78.  
  79. END $$
  80. DELIMITER ;
  81. -- --------------------------------------------------------------------------------------------------------
  82. CALL sp_AlterTable
  83.  
Saludos cordiales...
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines