![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
![]() Hola al grupo:
Necesito hacer una consulta para saber que clientes tienen más de 3.000 € de facturación entre dos fechas(el tipico resumen anual). El caso es que estoy bloqueado, no veo la consulta... Ayuda: Tengo una típica tabla de Clientes y otra típica tabla de Facturas, con un campo Total. Gracias de antemano. |
#2
|
||||
|
||||
Hola.
Puedes hacer algo de este estilo : Código:
select CLI_ID, CLI_NOMBRE, CLI_APELLIDOS from CLIENTES inner join FACTURAS on FAC_CLI_ID = CLI_ID and FAC_FECHA between :DESDE and :HASTA group by CLI_ID, CLI_NOMBRE, CLI_APELLIDOS having sum(FAC_TOTAL) > 3000
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 06-11-2003 a las 14:02:06. |
#3
|
|||
|
|||
esto... Marc, te ha faltado poner en SUM en el SELECT :p
Código:
select CLI_ID, CLI_NOMBRE, CLI_APELLIDOS, SUM(FAC_TOTAL) from CLIENTES inner join FACTURAS on FAC_CLI_ID = CLI_ID and FAC_FECHA between :DESDE and :HASTA group by CLI_ID, CLI_NOMBRE, CLI_APELLIDOS having sum(FAC_TOTAL) > 3000 |
#4
|
||||
|
||||
Hola.
La verdad es que no es imprescindible para que funcione la consulta. Aunque ciertamente, probablemente también necesitará incluir en la relación de clientes el importe acumulado. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
![]() Gracias por el interes mostrado.
Acabo de probar,,,pero: Dynamic SQL Error SQL error code = -104 invalid column reference siempre que añado la clausula "sum(F.Total)" |
#6
|
||||
|
||||
Tu base de datos no debe soportar la cláusula HAVING, ¿ que base de datos utilizas ?
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#7
|
|||
|
|||
InterBase 6.0, con SQL dialect 1 y si cambio a 3 idem.
|
#8
|
||||
|
||||
Hola.
Es curioso porqué Firebird 1 si ejecuta perfectamente esa sentencia, y Firebird 1 es practicamente un hermano gemelo de Interbase 6.0. (Aunque las pruebas las he hecho con Dialecto 3). ¿ Porque no sustituyes Interbase 6.0 por Firebird 1.03 ?. Estas dos bases de datos són tan parecidas (Firebird es una evolución open source generada a partir del código de Interbase 6.0 liberado por Borland en su momento), que muy probablemente no tengas que tocar ni una sola linea de código. Ademas de ejecutar correctamente agrupaciones con HAVING, Firebird 1.03 es más estable que Interbase 6.0 puesto que tiene muchos bugs corregidos, además de caracteristicas adicionales, como por ejplo. consultas SELECT FIRST n ....., etc. ... http://sourceforge.net/project/showf...?group_id=9028 Bájate Firebird 1.03 para Win32 (NOTA : ya está disponible una versión casi final de Firebird 1.5, pero aunque es más rápido y lleva bastantes características nuevas, no te lo recomiendo inicialmente puesto que seguramente tendrías que modificar tu programa por problemas de compatibilidad con IB 6.0). Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 06-11-2003 a las 19:07:35. |
#9
|
|||
|
|||
Voy a probarlo,,, gracias x1.000
|
#10
|
|||
|
|||
![]() Algo tengo que estar haciendo mal.
select C.Cliente, C.Titulo, SUM(F.TOTAL) from CLIENTES C inner join FACTURAS_CLIENTES F on F.Cliente = C.Cliente group by C.Cliente having sum(F.TOTAL) > 3000 sigue sin funcionar. |
#11
|
||||
|
||||
¿ Lo has probado con Firebird 1.03 ?
¿ Te da el mismo error u otro ? El error te indicaba que no reconocia la columna, ¿ estas seguro que el campo se llama así ?, prueba primero la consulta sin el HAVING. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#12
|
||||
|
||||
select C.Cliente, C.Titulo, SUM(F.TOTAL)
from CLIENTES C inner join FACTURAS_CLIENTES F on F.Cliente = C.Cliente group by C.Cliente, cTitulo having sum(F.TOTAL) > 3000 Un Saludo. Estoy ya te lo habia dicho Marc y Cadetill.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#13
|
|||
|
|||
Sólo una nota aclaratoria, recuerda que en la cláusula Group By han de ir los mismos campos que en la Select menos los de agregado
|
#14
|
|||
|
|||
![]() Es lo que tiene la ignorancia.
Gracias x 1.000 (otra vez) |
![]() |
|
|
![]() |
|