PDA

Ver la Versión Completa : Clientes con Total Facturacion >= 3000


Producto77
06-11-2003, 11:46:40
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.

guillotmarc
06-11-2003, 13:58:20
Hola.

Puedes hacer algo de este estilo :


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


Saludos

__cadetill
06-11-2003, 14:46:38
esto... Marc, te ha faltado poner en SUM en el SELECT :p


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

guillotmarc
06-11-2003, 14:55:39
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.

Producto77
06-11-2003, 16:24:37
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)"

guillotmarc
06-11-2003, 17:06:08
Tu base de datos no debe soportar la cláusula HAVING, ¿ que base de datos utilizas ?

Saludos.

Producto77
06-11-2003, 18:44:38
InterBase 6.0, con SQL dialect 1 y si cambio a 3 idem.

guillotmarc
06-11-2003, 19:04:18
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/showfiles.php?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.

Producto77
06-11-2003, 19:31:02
Voy a probarlo,,, gracias x1.000

Producto77
10-11-2003, 14:21:15
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.

guillotmarc
10-11-2003, 14:26:54
¿ 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.

marcoszorrilla
10-11-2003, 15:14:55
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.

__cadetill
10-11-2003, 15:36:21
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

Producto77
10-11-2003, 16:02:20
Es lo que tiene la ignorancia.
Gracias x 1.000 (otra vez)