PDA

Ver la Versión Completa : problemas con campos y sum


Giniromero
15-12-2003, 11:02:10
Hola a todos,

Estoy usando interbase 7 con dialecto 3.

Tengo tres tablas que me gestionan la parte económica. Los pagos generales, (econo), la venta de material (ecolib), y el pasivo (ecocomp), y luego la tabla de los clientes.

El caso es que quiero sacar un listado, que se pueda imprimir con todo lo que está pendiente de cobrar a cada cliente, de cada una de las tablas, esto es, que haya una sóla línea por cliente con una columna por tabla, donde figure la suma de todos los registros que para ese cliente hay en esa tabla, y si no debe nada, que aparezca 0 en ese campo o vacio.

Este código me funciona bien:

select (D1.APELALU || ', ' || D1.NOMALU) as APENOM,
D1.NUMALU,
(select SUM(0 - D2.impdebe + D2.imphaber) from econo D2
where D2.NUMALU =D1.numalu AND (SUM(0 - D2.impdebe + D2.imphaber)<>0)
GROUP BY D2.NUMALU) AS SUMECONO
FROM clientes D1

ME muestra la suma para la tabla de econo, de todos los apuntes económicos, que tiene este cliente.

y me funciona, aparentemente bién, donde la suma es 0, no me pone nada, cuando hay valor, lo pone.

Pero claro, me encuentro con dos problemas. Si añado código para las otras tablas,

select (D1.APELALU || ', ' || D1.NOMALU) as APENOM,
D1.NUMALU,
(select SUM(0 - D2.impdebe + D2.imphaber) from econo D2
where D2.NUMALU =D1.numalu AND (SUM(0 - D2.impdebe + D2.imphaber)<>0)
GROUP BY D2.NUMALU) AS SUMECONO,
(select SUM(0 - D3.impdebe + D3.imphaber) from ecolib D3
where D3.NUMALU =D1.numalu
GROUP BY D3.NUMALU) SUMECOLIB,
(select SUM(0 + D4.importe) from ECOCOMP D4
where D4.NUMALU =D1.numalu
GROUP BY D4.NUMALU) AS SUMECOCOMP
FROM clientes D1

No me da error al ejecutarlo, pero los campos, o me salen como null, o con 0.

A esto hay que añadirle, que si intento añadir a las otras dos tablas lo que está en negrita, directamente me salta un error al ejecutar el SQL:

"Overflow occurred during data type conversion. conversion error from string ''0''"

y no lo entiendo. Por que les estoy poniendo el mismo código a las tres tablas, cambiando sólo los campos y nombre de la propia tabla.

He revisado incluso en los metadata que tiene cada tabla en los campos que se utilizan para el sum, y les he puesto a los tres el mismo dominio, para que no haya problemas.

todos tienen numeric (15, 2) que si creo una vista, se convierte en (18, 2).

No sé que soy haciendo mal, pues debería funcionar este código para las tres tablas por igual, sin embargo, si lo monto sólo para una de ellas, según el primer código que os he escrito, sólo me funciona con la tabla de econo.


Alguna idea?

Gracias de antemano,

Virginia

__cadetill
15-12-2003, 15:10:21
mira de probar algo así...


select (D1.APELALU || ', ' || D1.NOMALU) as APENOM, D1.NUMALU, SUM(0 - D2.impdebe + D2.imphaber)
from clientes D1
inner join econo D2 on (D2.NUMALU = D1.numalu)
GROUP BY apenom, D1.NUMALU
having SUM(0 - D2.impdebe + D2.imphaber) <> 0

Giniromero
16-12-2003, 10:30:44
Hola ,

He intentado probar el código que me comentas, y me sale el siguiente error,

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
APENOM.

si quito del group by el APENOM entonces me dice que:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
invalid column reference.

no importa si simplemente quito apenom o si lo sustituyo por D1.APELALU, igualmente me resulta esto.

En cualquier caso, gracias por la ayuda, saludos

Virginia

lucianojdg
22-12-2003, 20:40:45
Prueba con esto:

select (D1.APELALU || ', ' || D1.NOMALU) as APENOM, D1.NUMALU, SUM(0 - D2.impdebe + D2.imphaber)
from clientes D1
inner join econo D2 on (D2.NUMALU = D1.numalu)
GROUP BY 1, 2
having SUM(0 - D2.impdebe + D2.imphaber) <> 0


Saludos

LucianoDG