** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - DSum en una consulta
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoDSum en una consulta

 Responder Responder
Autor
Mensaje
Adrianet Ver desplegable
Habitual
Habitual
Avatar

Unido: 26/Marzo/2015
Localización: Valencia
Estado: Sin conexión
Puntos: 135
Enlace directo a este mensaje Tema: DSum en una consulta
    Enviado: 31/Enero/2023 a las 15:51
Hola amigos del foro,
estoy diseñando una consulta para detectar que trabajadores no tienen horas en todo el mes 
pero no ofrece el resultado deseado,.... 
Tenemos dos tablas: Personal, HorasFichajes
ambas relacionadas por el campo CodTrab

En diseño de consulta tenemos estos campos:

CodTrab, Apellidos, Nombre, ……             que pertenecen a la tabla Personal

 

En la consulta, añado un campo calculado y pongo esta expresión:

HorasMes: DSuma("[totalhoras]";"[horasfichajes]";"[codtrab]= '" & [horasfichajes].[codtrab] & "'")

Para cada codtrab nos devuelve la suma del campo “totalhoras” de la tabla “HorasFichajes

Pero la consulta sólo ofrece los registros de Personal que tienen horas, es decir, los que tiene en la tabla HorasFichajes, pero no es ese el objetivo buscado.

Tal vez, no estoy realizando un buen diseño de la consulta o los criterios no son correctos, ,,,

Agradecería que me indicasen donde estoy fallando, o que es lo que me falta poner.


Nota: este caso se parece al típico ejemplo de "artículos de la tienda sin ventas en el mes"

es decir, partiendo de los códigos de artículos y las ventas registradas por artículo, saber que productos no han tenido ninguna venta. Lo leí hace mucho tiempo, pero no me acuerdo de cual era la solución que le daban.


Gracias amigos, y un saludo.







Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14025
Enlace directo a este mensaje Enviado: 31/Enero/2023 a las 15:59
Por un lado, yo haría una consulta que obtuviera las horas del mes agrupadas por trabajador.

Esta consulta la relacionamos con la tabla trabajadores (por id del mismo) y aquellos que no tengan suma de horas (ojo que serán nulos) serán los que necesitas.




Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Adrianet Ver desplegable
Habitual
Habitual
Avatar

Unido: 26/Marzo/2015
Localización: Valencia
Estado: Sin conexión
Puntos: 135
Enlace directo a este mensaje Enviado: 31/Enero/2023 a las 16:39
Hola Mihura, gracias por responder

La consulta la he llamado 00_HorasTot1, y es una consulta de totales:

CodTrab, SumadeTotalhoras

Luego creo una nueva consulta con la consulta anterior y la tabla Personal, ….

SELECT [00_HorasTot1].codtrab, [00_HorasTot1].SumaDeTotalHoras, Personal.APELLIDOS, Personal.NOMBRE

FROM 00_HorasTot1 INNER JOIN Personal ON [00_HorasTot1].codtrab = Personal.CODTRAB;

Pero siguen saliéndome los mismos registros que antes, todos con horas, no aparece ninguno sin horas.

. . .


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14025
Enlace directo a este mensaje Enviado: 31/Enero/2023 a las 17:09
Tienes que relacionar la tabla Personal con horas ... y ademas con LEFT JOIN, si pones un INNER JOIN solo te mostrará los registros con datos.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Adrianet Ver desplegable
Habitual
Habitual
Avatar

Unido: 26/Marzo/2015
Localización: Valencia
Estado: Sin conexión
Puntos: 135
Enlace directo a este mensaje Enviado: 31/Enero/2023 a las 17:50
Perfecto, solucionado, y además le pongo en criterio: 
ESTADO = "Alta"
Sumadetotalhoras = es nulo

y así visualizamos directamente los que nos interesan, (los que estando de alta no tienen suma de horas)

SELECT Personal.CENTRO, Personal.CODTRAB, Personal.APELLIDOS, Personal.NOMBRE, [00_HorasTot1].SumaDeTotalHoras, Personal.ESTADO

FROM Personal LEFT JOIN 00_HorasTot1 ON Personal.CODTRAB = [00_HorasTot1].codtrab

WHERE ((([00_HorasTot1].SumaDeTotalHoras) Is Null) AND ((Personal.ESTADO)="Alta"));


Esta consulta me va ser de mucha utilidad, ya que así, con un clic chequeamos los trabajadores que no tienen horas, en un momento determinado del transcurso del mes.

Muchas gracias por tu ayuda Mihura.

Saludos.

Se puede cerrar el hilo.


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable