Ayuda: duplica el valor en una consulta.

30 views
Skip to first unread message

Alejandro Garcia G.

unread,
Jan 15, 2016, 5:23:37 PM1/15/16
to Comunidad de Visual Foxpro en Español
Saludos a todos:

Tengo la siguiente consulta (mas o menos), el resultado en algunos casos me los esta duplicando y no encuentro como hacer para que no lo haga.

SELECT SUM(a.debito), COUNT(a.codter)
    FROM contablilidad a
    LEFT JOIN cliente b ON a.codter = b.codter
    LEFT JOIN detcliente c ON a.codter = c.codcli
    WHERE a.codter = '123'
   
   
En cliente tengo los datos del cliente (existe un registro por cada uno de ellos).
En contabilidad, los movimientos contables.
En detcliente tengo basicamente unos codigos de las empresas en donde el cliente labora, un cliente puede tener 1, 2 o 3 empresas.

En los casos en donde tiene dos empresas en donde labora, la suma la duplica y el conteo tambien.

Por ejemplo, si un cliente tiene un solo valor debito por 100, la consulta me esta devolviendo 200 y en donde debe contarme 1 por ser un solo cliente,
me esta mostrando 2.

Se que como en detcliente hay 2 registros, me esta duplicanod la información, lo se por que cuando el cliente tiene solo un empleo me da los valores correctos.

He cambiado el JOIN en todos los casos pero me sale erroneo. ¿Como puedo hacer?

Para aclarar no tengo otra manera de cruzar las 3 tablas solo por el codigo del cliente (o tercero).

Alejandro Garcia G.

unread,
Jan 15, 2016, 5:43:12 PM1/15/16
to Comunidad de Visual Foxpro en Español
Se me olvido colocar algo en la consulta ya que con esto debo traer un valor de la tabla detcleinte quedando de esta manera

SELECT SUM(a.debito), COUNT(a.codter), c.sueldo
    FROM contablilidad a
    LEFT JOIN cliente b ON a.codter = b.codter
    LEFT JOIN detcliente c ON a.codter = c.codcli
    WHERE a.codter = '123'

Que sucede, si un cliente labora en dos empresas, debo traer el valor del salario mas alto de los dos o su sumatoria.

Víctor Hugo Espínola Domínguez

unread,
Jan 15, 2016, 5:51:56 PM1/15/16
to publice...@googlegroups.com
Si muestras algunos registros de las tres tablas sería más fácil entender el problema.


Saludos,
Víctor.
Lambaré - Paraguay.

Alejandro Garcia G.

unread,
Jan 16, 2016, 9:15:46 AM1/16/16
to Comunidad de Visual Foxpro en Español
Victor Gracias. Resolvi el detalle realizando otra consulta aparte en donde leugo de tener el dato de la sumatoria del cliente, realizo la consulta del sueldo en la tabla detcliente y traigo con un MAX() o un SUM() (depende de lo que desee) el valor del sueldo y lo agrego a la primera consulta. Algo asi:

SELECT SUM(a.debito), COUNT(a.codter), 0 as sueldo
    FROM contablilidad a
    WHERE a.codter = '123'
   INTO CURSOR crsCont READWRITE

SELECT DISTINCT MAX(sueldo) as sueldo FROM detcliente WHERE codcli = '123' INTO CURSOR crsSueldo

IF RECCOUNT() >0 &&Si hay registro
   lnSueldo = sueldo
   SELECT crsCont
   REPLACE sueldo WITH lnSueldo
ENDIF


Mas o menos eso hice y digo mas o menos pues realmente no filtro un solo cliente sino varios, entonces hago la segunda consulta en un SCAN...ENDSCAN de las registros de la tabla crsCont. En fin, me funciono así.

Reply all
Reply to author
Forward
0 new messages