Imprimir página | Cerrar ventana

Consulta resumen

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84529
Fecha de impresión: 26/Marzo/2026 a las 17:16


Tema: Consulta resumen
Publicado por: jorgepenalver
Asunto: Consulta resumen
Fecha de publicación: 01/Junio/2019 a las 14:06
Hola compañeros

Trabajo en un colegio y me han mandado los informáticos un fichero con el que quiero trabajar.
Os incluyo una imagen de como es la estructura para que entendáis lo que quiero hacer.

https://ibb.co/KzbPwy5" rel="nofollow - https://ibb.co/KzbPwy5

Esta tabla, en lugar de contener un solo ID por alumno con diferentes campos, ha generado un registro por cada opción que el alumno ha seleccionado. 

Es como si en una base de datos de películas tuviéramos 3 registros por cada película: 
  1. Los tres registros tendrían un campo llamado 'Bloque' que contendría como contenidos posible "Título, Director, Fecha" y además un campo 'Opción'
  2. Ese campo 'Opción' tendría como contenido "Steven Spielperg" si en ese registro 'Bloque' estuviera rellenado como "Director".
  3. En el primer registro aparecía el Título, en el siguiente el Director y en el siguiente la Fecha.
  4. Los tres compartirían el mismo ID.
Así es como me han llegado los registros en esta tabla de alumnos, como podéis ver en la imagen. Lo que quiero es

  1. Agrupar todos los registros que tengan el mismo "idalumno"
  2. En la nueva tabla añadir como CAMPOS los seis tipos de contenidos que contiene el campo "bloque" en la tabla original, asignándoles el contendio del registro "opcion"
Me estoy volviendo majareta con las consultas. Muchas gracias a todos





Respuestas:
Publicado por: xavi
Fecha de publicación: 02/Junio/2019 a las 09:40
Hola,

De entrada el diseño de la información que te han mandado me parece bastante correcto. Por lo que supongo que se trata de una extracción puntual de datos. Hoy tienes 6 "bloques" que quieres convertir en 6 campos. Si mañana tienes un numero distinto de bloques la cosa cambia.

Lo que estás pidiendo no tengo yo muy claro que se pueda hacer mediante consultas. Yo lo plantearía mediante VBA:
- Requisito previo: crear la tabla destino: idAlumno + los 6 campos "bloque". Para hacerlo fácil, deben tener el mismo nombre que los posibles valores (aunque eso va en contra de mi forma de nombrar campos) 
- Abrir recordsets sobre la tabla origen y destino
- Recorrer el recordset origen
- En cada registro buscar el idalumno en el recordset destino. Si lo encontramos -->Edit; si no lo encontramos --> AddNew
- Asignar al campo adecuado el valor de "opción": rstDestino.Fields(rstOrigen!bloque) = rstDestino!Opcion
- Salvar y pasar al siguiente

Así es como yo lo enfocaría. Al final son pocas líneas de código

Un saludo





-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Chea1
Fecha de publicación: 02/Junio/2019 a las 19:14
A mí la tabla de la imagen me parece la que soporta una relación de varios a varios entre Alumnos y Opciones, que se corresponden con los dos IDs que hay en la tabla. Opciones se relaciona además con otras dos tablas, Bloques y Clases, o, mejor dicho, con Clases que se relaciona a su vez con Bloques.

Lo mínimo sería crear las tablas Alumnos y Opciones con sendas consultas de creación de tablas a partir de SELECT DISTINCT IdAlumno, Alumno FROM Mitabla y SELECT DISTINCT ID, Opción, Clase, Bloque  FROM Mitabla.

Si luego consigues separar las tablas Bloques y Clases y sustituir en la actual la descripción por sus respectivos ID, que tendrías que crear, quedaría mucho más fino.




-------------
Saludos
José Bengoechea Ibaceta
http://jbengoechea.com - Mi página
http://access.bengoechea.net -
Mi otra página


Publicado por: jorgepenalver
Fecha de publicación: 23/Junio/2019 a las 16:27
Gracias por las respuestas. Lo veo mucho más claro.



Imprimir página | Cerrar ventana