Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ayuda con consulta en Access

Estas en el tema de Ayuda con consulta en Access en el foro de Bases de Datos General en Foros del Web. Hola.Soy novato en esto de las bases de datos y tengo un problema con una consulta. Veréis, he hecho una BD con access.La BD es ...
  #1 (permalink)  
Antiguo 30/08/2010, 01:49
 
Fecha de Ingreso: septiembre-2009
Mensajes: 17
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda con consulta en Access

Hola.Soy novato en esto de las bases de datos y tengo un problema con una consulta.

Veréis, he hecho una BD con access.La BD es para una asociación, y en ella figuran los datos de los socios;Nombre, apellidos, dni,dirección, etc.
Además tengo metidos los ingresos que hacen dichos socios.
Para ello utilizo un formulario donde pongo el número de socio que hace el ingreso,la fecha del ingreso, el importe del ingreso y que es lo que abona con ese ingreso.

Hasta aquí sin problemas.El caso es que quiero hacer una consulta donde me diga cual es el último ingreso (por fecha) de TODOS los socios y que en el concepto de para que sirve el abono sólo aparezcan los abonos que sirven para pagar cuotas.

He hecho la consulta y me busca los ingresos de cuotas de todos los socios pero me salen TODOS los ingresos de todos los socios...es decir desde el primero hasta el último del socio número 1, del 2, del 3,etc,etc.

¿qué criterio tengo que poner para que me aparezca sólo el último ingreso de cada socio?
La BD está hecha con Access 2003.GRACIAS
  #2 (permalink)  
Antiguo 31/08/2010, 05:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda con consulta en Access

Si un socio ha pagado dos importes el mismo dia debes verlos los dos?

Siendo cuotas parece logico (¿?) con lo que quizas seria mejor sumar los posibles importes y contar las cuotas....

Si no se da el caso no importa puesto que no se va a sumar nada....

Código SQL:
Ver original
  1. SELECT Ingresos.numsoc,
  2.    socios.nombre,
  3.    MAX(Ingresos.fecha) AS ultFecha,
  4.    SUM(Ingresos.importe) AS TotalPagado,
  5.    COUNT(*) AS numeroCuotas,
  6.    Ingresos.concepto
  7. FROM (Ingresos INNER JOIN socios
  8.    ON Ingresos.numsoc = socios.numsoc)
  9. INNER JOIN (SELECT Ingresos.numsoc,
  10.                                  MAX(Ingresos.fecha) AS mfecha
  11.                      FROM Ingresos
  12.                      WHERE (((Ingresos.concepto)="Q"))
  13.                      GROUP BY Ingresos.numsoc)  AS sbc
  14.       ON (Ingresos.fecha = sbc.mfecha)
  15.             AND (Ingresos.numsoc = sbc.numsoc)
  16. GROUP BY Ingresos.numsoc,
  17.    socios.nombre,
  18.    Ingresos.concepto
  19. HAVING (((Ingresos.concepto)="Q"));

Corregido!!!

Quim

Última edición por quimfv; 31/08/2010 a las 06:35 Razón: Corregido!!!
  #3 (permalink)  
Antiguo 31/08/2010, 09:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 17
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con consulta en Access

No habia pensado en esa posibilidad.Nunca ha ocurrido hasta ahora.
De todas formas... que tengo que hacer con ese código.No entiendo nada.
  #4 (permalink)  
Antiguo 01/09/2010, 02:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda con consulta en Access

Crea una counsulta nueva, cierras la ventana donde se eligen las tablas y abres la vista SQL (primer icono de la izquierda), aparecera una ventana blanca con
SELECT; ahi tienes que pegar el codigo.

Código SQL:
Ver original
  1. SELECT Ingresos.numsoc,
  2.    socios.nombre,
  3.    Ingresos.fecha AS Fecha,
  4.    SUM(Ingresos.importe) AS TotalPagado,
  5.    COUNT(*) AS numeroCuotas,
  6.    Ingresos.concepto
  7. FROM (Ingresos INNER JOIN socios
  8.    ON Ingresos.numsoc = socios.numsoc)
  9. INNER JOIN (SELECT Ingresos.numsoc,
  10.                        MAX(Ingresos.fecha) AS mfecha
  11.                      FROM Ingresos
  12.                      WHERE (((Ingresos.concepto)="Q"))
  13.                      GROUP BY Ingresos.numsoc)  AS sbc
  14.       ON (Ingresos.fecha = sbc.mfecha)
  15.             AND (Ingresos.numsoc = sbc.numsoc)
  16. GROUP BY Ingresos.numsoc, Ingresos.fecha
  17.    socios.nombre,
  18.    Ingresos.concepto
  19. HAVING (((Ingresos.concepto)="Q"));

Una vez pegado debes modificarlo para que se ajuste a tu base de datos, debes cambiar los nombres de las tablas y de los campos:

Ingresos --> nombre de tu tabla ingresos
socios --> nombre de tu tabla de socios

numsoc --> nombre de tu campo con el numero de socio
fecha --> ...
...

Ingresos.concepto)="Q" --> aqui debe ir tu restricción para obtener cuotas cambia Q por el contenido que deba tener el campo concepto.

Puedes agregar campos (apellido...) a la consulta principal pero recuerda agregarlos tanto en la primera parte, despues del primer select, como en el ultimo group by, "nombretabla.nombrecampo," el ultimo no debe llevar la coma. No añadas anada en la subconsulta, (SELECT ...) AS sbc.


Código SQL:
Ver original
  1. SELECT Ingresos.numsoc,
  2.    socios.nombre,
  3.    Ingresos.fecha AS Fecha,
  4.    SUM(Ingresos.importe) AS TotalPagado,   '<-- lista de campos a mostrar'
  5.    COUNT(*) AS numeroCuotas,
  6.    Ingresos.concepto
  7. FROM (Ingresos INNER JOIN socios
  8.    ON Ingresos.numsoc = socios.numsoc)    '<-- combinación de tablas'
  9. INNER JOIN (SELECT Ingresos.numsoc,
  10.                        MAX(Ingresos.fecha) AS mfecha
  11.                      FROM Ingresos              '<-- subconsulta que elige la '
  12.                      WHERE (((Ingresos.concepto)="Q"))   'fecha mas alta para cada'
  13.                      GROUP BY Ingresos.numsoc)  AS sbc   'socio'
  14.       ON (Ingresos.fecha = sbc.mfecha)        '<-- combinacion de las tablas con'
  15.             AND (Ingresos.numsoc = sbc.numsoc)   'la sub consulta'
  16. GROUP BY Ingresos.numsoc,
  17.    Ingresos.fecha,
  18.    socios.nombre,                          ' <-- agrupacion de registros'
  19.    Ingresos.concepto
  20. HAVING (((Ingresos.concepto)="Q"));   '<-- restrición de cuotas'

No he comentado la subconsulta pero sigue una estructura similar a la consulta principal.

Una vez hecho esto te debe dar lo que buscas...

Quim

Última edición por quimfv; 01/09/2010 a las 04:02
  #5 (permalink)  
Antiguo 01/09/2010, 06:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 17
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con consulta en Access

Uff.Lo intentaré...vermos si lo hago bien.
Muchas gracias de antemano.

Etiquetas: access
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:32.