FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema: resultados inesperados en access
Hola a todos,
Tengo un problema en una consulta de Access. El objeto de la misma es obtener la deuda (total) de clientes que tengan un aviso enviado. Para ello creé una consulta anidada que solicita una fecha de aviso de deudas (por lo tanto, lo primero que tendrá que comprobar és que existan facturas impagadas con fecha de expedición anterior a esta fecha de aviso, por ello la razón de ser de la subconsulta) --y como resultado extrae la deuda total del cliente (hay que tener en cuenta que dichos clientes pueden tener facturas impagadas posteriores a dicha fecha de aviso). Utilizo 3 tablas relacionadas: Abonados (clientes), Recibos (facturas) y calles (direcciones servicio). La relación es la siguiente: Abonados-Recibos: Uno a Muchos. Calles-Abonados: Uno a Muchos. La consulta en access es la siguiente: Código:
SELECT Abonados.CodigoAbonado AS REF, First(Abonados.Nombre1) AS NOMBRE, Calles.NombreCalle & ', ' & Abonados.NumeroFinca & '-' & Abonados.EscaleraFinca & '-' & Abonados.PisoFinca & '-' & Abonados.PuertaFinca AS DIRECCION, Abonados.AguaCortada AS CORTADA, Abonados.NumeroContador AS CONTADOR, Count(Recibos.NumeroRecibo) AS [nF/], Sum(Recibos.ImporteRecibo) AS IMPORTE, Abonados.Telefono1, Abonados.Telefono2, Abonados.Fax FROM (Abonados INNER JOIN Recibos ON Abonados.CodigoAbonado = Recibos.CodigoAbonado) LEFT JOIN Calles ON (Abonados.CodigoCalleFinca = Calles.CodigoCalle) AND (Abonados.CodigoZonaFinca = Calles.CodigoZona) AND (Abonados.CodigoPoblacionFinca = Calles.CodigoPoblacion) WHERE (((Abonados.CodigoAbonado) In (SELECT ((Recibos.CodigoAbonado)) FROM (Abonados INNER JOIN Recibos ON Abonados.CodigoAbonado = Recibos.CodigoAbonado) WHERE (Recibos.Situacion)="I" AND Abonados.IDFamilia <> 1 AND (Recibos.FechaRecibo) <= [:Fecha_Aviso] GROUP BY Recibos.CodigoAbonado))) GROUP BY Abonados.CodigoAbonado, Abonados.AguaCortada, Abonados.NumeroContador, Abonados.Telefono1, Abonados.Telefono2, Abonados.Fax, Calles.NombreCalle, Abonados.NumeroFinca, Abonados.EscaleraFinca, Abonados.PisoFinca, Abonados.PuertaFinca ORDER BY First(Abonados.Nombre1); El problema está en los campos Count(Recibos.NumeroRecibo) AS [nF/] -y- Sum(Recibos.ImporteRecibo) AS IMPORTE. Calcula mal, como si lo hiciera varias veces y agregara. Por ejemplo, en el primer registro sale que el cliente debe 34 recibos y una cantidad de 1.033,77 Eur. cuando en realidad son 4 recibos y 196,66. El problema aparece desde que incluí la consulta anidada. Cuando le consultaba facturas pendientes antes de determinada fecha, sin más, no ocurría. O más bien desde que incluyo el"IN", pues he forzado a buscar de abonados concretos incluidos manualmente en la consulta y obtiene el mismo result. En eso, y pienso, también en la agrupación, pues son los 2 únicos campos que no se agrupan en el "GROUP BY", pues son directamente calculados de la agrupación resultante. Agradecería enorme-mente me ayudaran a salir de este impass Salu2
__________________
La vida es un desliz. Después, te mueres. |
#2
|
||||
|
||||
Un consejo:
En una primera consulta obten los sumarios, agrupando solo por las claves primarias. una vez que tengas los sumarios haces un joín con los catálogos para obtener los datos adicionales. Saludos.
__________________
Conoce mi blog http://www.edgartec.com |
#3
|
||||
|
||||
Cita:
Perdona, soy semi-novato y no sé si he entendido bien. Supongo que por sumarios te refieres a la lista de claves agrupadas. Si no entiendo mal, me aconsejas que, una vez obtenido éstas, hacer la query definitiva con las tablas de facturación. ¿Te refieres a volcar dichos sumarios en una nueva tabla para hacer join en la consulta final? Si no es así, ¿podrías (si no es molestia) poner un pequeño ejemplo? Gracias por la respuesta.
__________________
La vida es un desliz. Después, te mueres. |
#4
|
||||
|
||||
Hola
Access tiene un generador de consultas, ahi se puede hacer la consulta que uno quiera y copiar la sentencia sql al programa, no creo que haga falta un select anidado para solo tres tablas. Saludos
__________________
Siempre Novato |
#5
|
||||
|
||||
Bueno, para la consulta que quiero, en principio no se me ocurre otra cosa que hacerla anidada.
__________________
La vida es un desliz. Después, te mueres. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema: resultados incrementales en Rave | david.rguez | Impresión | 1 | 24-10-2007 10:25:27 |
Problema con resultados Null | vpepen | SQL | 14 | 27-07-2006 10:19:04 |
Problema con Access | diegolf | Conexión con bases de datos | 1 | 23-12-2004 09:35:59 |
Problema con Access | senpiterno | Conexión con bases de datos | 1 | 19-10-2004 07:19:48 |
problema con Access y Win xp | Rabata | Conexión con bases de datos | 0 | 24-02-2004 11:14:19 |
|