Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
problemas con campos y sum

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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 15-12-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
mira de probar algo así...

Código:
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
Responder Con Cita
  #3  
Antiguo 16-12-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #4  
Antiguo 22-12-2003
lucianojdg lucianojdg is offline
Miembro
 
Registrado: dic 2003
Posts: 42
Poder: 0
lucianojdg Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:50:32.


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
Copyright 1996-2007 Club Delphi