Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Clientes con Total Facturacion >= 3000 (https://www.clubdelphi.com/foros/showthread.php?t=5027)

Producto77 06-11-2003 11:46:40

Clientes con Total Facturacion >= 3000
 
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 :

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

Saludos

__cadetill 06-11-2003 14:46:38

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


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/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.

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)


La franja horaria es GMT +2. Ahora son las 08:57:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi