** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Informe con valores repetidos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoInforme con valores repetidos

 Responder Responder Página  12>
Autor
Mensaje Invertir el orden de clasificación
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Tema: Informe con valores repetidos
    Enviado: 23/Mayo/2021 a las 06:06
Hola! 
Hace tiempo que pedí cerrar este hilo, no puedo escribir más en el foro.
Muchas gracias
Saludos
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 06/Mayo/2021 a las 04:21
Hola!!
Se puede cerrar este hilo
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 19/Abril/2021 a las 05:13
No pude resolverlo de la manera que pretendía porque se repetían los valores.
Drop here!
Mounir me dió la solución, la idea y el código así que agradezco mucho su ayuda y la comparto con ustedes.
Reemplazó los cuadros combinados por cuadros de lista, con selección múltiple, cuyo origen de datos era una consulta idéntica a la que tenía el cuadro combinado.
A un botón le colocó el siguiente código:

Dim strList As String
Dim varItm As Variant


    For Each varItm In Me.LstMotivoVeda.ItemsSelected
       strList = strList & Me.LstMotivoVeda.Column(0, varItm) & ", "

    Next varItm
    If strList <> "" Then
strList = Left$(strList, Len(strList) - 2)
End If
Me.TxtMotivoVeda = strList & "."

DoCmd.SetWarnings False 

Este código toma los valores seleccionados en el cuadro de lista Lst.MotivoVeda (en rojo) y los pega en el cuadro de texto TxtMotivoVeda (en verde), separado por "," y al final le coloca un "."

De esta manera cuando generas la consulta, se inserta en una sola fila y no se duplican los registros, entonces cuando generas un informe de la consulta, como están los datos en una sola fila, no hay valores duplicados.

Muchísimas gracias!! Se puede cerrar esta discusión.
Saludos 
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 11/Abril/2021 a las 23:24
Perdón que vuelva a insistir con el post, por ahí con un video puedo ser más explícito de lo que estoy haciendo y a donde apunto. 
Este es el modelo de como está funcionando, te muestro desde que cargo un paciente hasta que le hago el informe y muestro las tablas donde se guardan.}
Al final te agrego la foto de como se vería el informe de la consulta

Video: (perdón que lo hice con zoom, pero no tenía otro programa para grabarlo)
https://mega.nz/file/thtnhAYI#kSVIOzaNUdhvBjJ0vXW9pU_LJbpkEYg03ndM7HeUpdI

Foto del informe: (aclaro que en la consulta solo puse los datos generales y los protocolos y ya se repiten 3 veces las filas) imagínense si tengo 3-4 motivos de consulta, 3-4 diagnósticos para esófago, estómago y duodeno y 2 o 3 terapéuticas, se hacen muchísimas filas)

Hoja 1:
https://ibb.co/xmp3VHY

Hoja2:
https://ibb.co/0sh6x9h


Saludos y nuevamente muchas gracias

Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 23:09
No puedo resolverlo, creo que es porque todavía no comprendo la nomenclatura del sql. Voy a tratar de Leer un poco y ver si puedo escribirlo yo, por ahí lo que hincha es el in join!
De todas maneras gracias!! Si puedo descrifrar mi error lo subo acá y sino vuelvo con alguna otra idea
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 19:36
Hola!

Utilizas la función "DMax" para los protocolos cuando se debe aplicar sobre la fecha. Además intenta agrupar las consultas por separado, utiliza "Max" o "Last" en totales para la fecha y cuando te cuadre el resultado los unes. a ver que pasa.

Editado por mounir - 10/Abril/2021 a las 19:38
Un Saludo.
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 19:26
Si le agrego el all, me sigue devolviendo lo mismo con las dos formas
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 19:20
Hola!

En vez de "UNION" poner "UNION ALL", a ver si funciona así.
Un Saludo.
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 18:48
Perdón por ser tan duro mounir! Pero no lo puedo resolver. 
Las variables con los códigos SQL, a ver si te das cuenta cual es mi error

Si yo no agrego un campo nuevo y uno los códigos, el resultado es este:
código:
SELECT distinct Informes_veda.cod_informes_veda, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Esofago
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Esofago)=DMax("esofago","ProtocolosVeda")));
UNION
SELECT DISTINCT Informes_veda.cod_informes_veda AS Expr1, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Estomago
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Estomago)=DMax("estomago","ProtocolosVeda")));

UNION
SELECT DISTINCT Informes_veda.cod_informes_veda AS Expr1, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Duodeno
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Duodeno)=DMax("duodeno","ProtocolosVeda")));

El resultado es este:
https://ibb.co/6YPLVXG
La información se agrega en un último campo, en este caso esófago y coloca los datos provenientes de estómago y duodeno abajo.
Aclaro que si escribo el código por separado, es decir sin las uniones, cada uno funciona bien y agrega una sola fila. De esta forma interpreté el ejemplo que me diste vos.


Ahora bien, pensé que por ahí debería agregar los campos a la consulta y despues hacer la unión.
El código es el siguiente:
SELECT DISTINCT Informes_veda.cod_informes_veda, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Esofago, ProtocolosVeda.Estomago, ProtocolosVeda.Duodeno
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Esofago)=DMax("esofago","ProtocolosVeda")));

UNION
SELECT DISTINCT Informes_veda.cod_informes_veda, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Esofago, ProtocolosVeda.Estomago, ProtocolosVeda.Duodeno
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Estomago)=DMax("estomago","ProtocolosVeda")));

UNION
SELECT DISTINCT Informes_veda.cod_informes_veda, Pacientes.Apellido, Pacientes.Nombre, Pacientes.DNI, Pacientes.[Obra social], Informes_veda.[Servicio que solicito], Informes_veda.Endoscopista, Informes_veda.[Fecha del estudio], Informes_veda.Edad, ProtocolosVeda.Esofago, ProtocolosVeda.Estomago, ProtocolosVeda.Duodeno
FROM Pacientes INNER JOIN ((((Informes_veda INNER JOIN motivos_informe_veda ON Informes_veda.cod_informes_veda = motivos_informe_veda.cod_informe_veda) INNER JOIN PatologiaVeda ON Informes_veda.cod_informes_veda = PatologiaVeda.cod_informe_veda) INNER JOIN ProtocolosVeda ON Informes_veda.cod_informes_veda = ProtocolosVeda.cod_informe_Veda) INNER JOIN terapeuticaVeda ON Informes_veda.cod_informes_veda = terapeuticaVeda.cod_informe_veda) ON Pacientes.cod_paciente = Informes_veda.cod_pacientes
WHERE (((Informes_veda.cod_informes_veda)=DMax("cod_informes_veda","Informes_veda")) AND ((ProtocolosVeda.Duodeno)=DMax("DUODENO","ProtocolosVeda")));

El resultado es este:
https://ibb.co/RYdwPwB
Me agrega en la consulta una fila para esófago, una para estómago y una para duodeno.
Aclaro que acá también si escribo los códigos por separado funciona bien y coloca los datos donde tiene que colocarlos, en una sola fila.



Drop here!


Editado por damian_colomb - 10/Abril/2021 a las 18:49
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 17:19
Hola!

No veo ningún problema respecto a que la información esta en varias tablas.
Debes crear una consulta de selección con todos los datos que necesitas pero para un protocolo luego los filtras por la fecha más reciente utilizando "Last" o "Max". Una vez conseguido haces el resto de los protocolos y después los unes.
Un Saludo.
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 10/Abril/2021 a las 16:18
Buen día!!
Hace unas horas que estoy probando diferentes formas de unirla y no he podido!
Tengo 2 problemas principalmente (Exceptuando la limitación lógica de mi escaso conocimiento)
El primero es que los campos DNI, nombre, fecha, endoscopista se encuentran en una tabla y los datos del protocolo_veda_esofago se encuentran en otra. Son varias tablas, relaciaonadas por un mismo campo, dejo foto a continuación:
https://ibb.co/7jCbhyb

El otro problema que tengo es la variabilidad en la cantidad de datos que se van a insertar en ciertos campos, es el caso de motivo de consulta, terapéutica y diagnósticos
A veces puede ser 1 solo motivo de consulta, 1 solo diagnóstico y  1 sola terapéutica, o a veces una cantidad variable de los 3 campos.

Esto no se si lo voy a pode resolver seleccionando una única fila, porque va a ser variable, a veces va a necesitar 2,3 o cualquier número, dependiendo los datos que se ingresen.

No se si me expresé bien en esta ocasión!

Saludos muchas gracias


Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 09/Abril/2021 a las 13:25
Muchas gracias mounir!!
Voy a ver si me puedo poner a probar esa idea entre hoy y mañana!
Te cuento si me salion!!
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 09/Abril/2021 a las 13:00
Hola!

Yo lo que haría es una consulta de Unión entre los tres estudios.

Prueba una consulta de selección primero con Protocolo_Veda de esófago y caundo consigues lo que quieres puedes utilizar el predicado (Top) para traer sólo un unico registo


Select Top 1 DNI, Nombre, Fecha, Endoscopista, protocolo_VedaEsofago From Tabla
UNION
Select Top 1 DNI, Nombre, Fecha, Endoscopista, protocolo_VedaEstomago From Tabla
UNION
Select Top 1 DNI, Nombre, Fecha, Endoscopista, protocolo_VedaDuodeno From Tabla


No comentas.

Un Saludo.
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 09/Abril/2021 a las 12:23
Buen día!
Si, siempre se miran y describen los 3 organos en el mismo estudio. Puede haber varios diagnósticos,varios motivos de consulta y varias terapéuticas en un mismo informe, en cambio los otras variables van a ser siempre una

Editado por damian_colomb - 09/Abril/2021 a las 12:26
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 09/Abril/2021 a las 11:12
Hola!

La duda que tengo es, si en el mismo día se le ha hecho los tres estudios (esófago, estómago o duodeno)?
Un Saludo.
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable