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 16-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
problemas con SUM

Hola,

Estoy usando interbase7 con dialecto 3.

Pretendo restar dos campos, de una misma tabla, cuyo tipo es numeric(15,2), y el resultado asignarselo al campo importe.

Hasta aquí todo bien.

El código que tengo para esto es:



select NUMCLI, IMPHABER, IMPDEBE, (imphaber - impdebe) AS IMPORTE
from econo

WHERE NUMCLI =:cliente.numcli
ORDER BY NUMCLI


Esto funciona OK, me pide que le diga el valor de cliente.numcli, se lo doy y me saca una lista con los campo que le pido, y un campo mas, IMPORTE, en el que figura la resta pedida.

El problema es cuando intento hacer un SUM con el campo importe obtenido.

Esto es, necesito sumar todos los valores resultantes de la resta anterior, y obtener un único resultado.

Para hacerlo, he utilizado el siguiente código:


select NUMCLI, IMPHABER, IMPDEBE, sum (imphaber - impdebe) AS IMPORTE
from econo

WHERE NUMCLI =:cliente.numcli
ORDER BY NUMCLI


pero esto me devuelve el siguiente error:


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


¿Alguien puede decirme que estoy haciendo mal?
¿que se me escapa? ¿que no estoy teniendo en cuenta y debería?

Muchas gracias por la ayuda de antemano,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 16-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No puedes consultar campos y campos afectados a funciones de grupo en la misma consulta, a no ser que pertenezcan al grupo o que utilices subconsultas.
Aclarando: Sum es una funcion de grupo, devuelve la suma de un grupo de resultados, puedes utilizarla con un group by o sin este, por ejemplo:
Código:
SELECT NUMCLI,  SUM(IMPHABER-IMPDEBE) AS IMPORTE
FROM ECONO
GROUP BY NUMCLI
ó
Código:
SELECT SUM(IMPHABER-IMPDEBE) AS IMPORTE
FROM ECONO
Si quieres que muestre la suma, y los el detalle sin agrupar, algunos motores te permiten hacer esto:
Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, 
       (SELECT SUM(IMPHABER, IMPDEBE) 
          FROM ECONO) TOTAL
FROM ECONO
Esto último, no tiene mucha lógica pues vas a mostrarle el total por cada fila, sería mas lógico si es un grupo que quieres mostrar el detalle:
Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, 
       (SELECT SUM(IMPHABER, IMPDEBE) 
          FROM ECONO E2 
         WHERE E1.NUMCLI=ED.NUMCLI) TOTAL
FROM ECONO E1
De todos modos, te recomiendo analizar bien que datos quieres mostrar, pues estos últimos suelen servir únicamente para marear al usuario.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 16-10-2003 a las 21:14:39.
Responder Con Cita
  #3  
Antiguo 17-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola,

He estado trabajando en base a lo que me diste.

Efectivamente, si pongo GROUP BY, me devuelve un sólo registro, con el valor de la suma total de todos los registros que para un mismo cliente hay.

El código que me ha funcionado es:

Cita:
select NUMALU,SUM(0 - econo.impdebe + econo.imphaber) IMPORTE
from econo
WHERE NUMALU =:alumnos.numalu
GROUP BY NUMALU
ORDER BY NUMALU
Pero, si trato de usar el código que me aconsejaste:

Cita:
SELECT NUMCLI, (0 - IMPDEBE + IMPHABER) PARCIAL,
(SELECT SUM(IMPDEBE, IMPHABER)
FROM ECONO E2
WHERE E1.NUMCLI=clientes.NUMCLI) TOTAL
FROM ECONO E1
Me da el siguiente error:


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 25.
,.

Y el cursor se me queda parado en la segunda línea, en IMPDEBE.

¿Que es lo que estoy poneindo mal ?

Saludos, y gracias por la ayuda.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #4  
Antiguo 17-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No lo estas poniendo igual que lo que te he pasado, fíjate que en el SQL que tu pasas aparece un alias "clientes" que no pertenece a ninguna tabla.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 20-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola,

Cita:
No lo estas poniendo igual que lo que te he pasado, fíjate que en el SQL que tu pasas aparece un alias "clientes" que no pertenece a ninguna tabla.


quote:
--------------------------------------------------------------------------------

SELECT NUMCLI, (0 - IMPDEBE + IMPHABER) PARCIAL,
(SELECT SUM(IMPDEBE, IMPHABER)
FROM ECONO E2
WHERE E1.NUMCLI=clientes.NUMCLI) TOTAL
FROM ECONO E1

--------------------------------------------------------------------------------


tal vez no aclaré que clientes, es el nombre de una tabla, supuse que era equivalente a poner el ED, tal como aparece en tu código. No se si tiene que ver con que no aparece relacionado con ninguna tabla, como pasa con E1 y E2, usando el from.

Esto es:

Cita:

SELECT NUMALU, (0 - IMPDEBE + IMPHABER) PARCIAL,
(SELECT SUM(IMPDEBE, IMPHABER)
FROM ECONO E2
WHERE E1.NUMALU=ED.NUMALU) TOTAL
FROM ECONO E1

Disculpa mi torpeza, pero, no veo donde está el problema.

Muchas gracias por la ayuda, en cualquier caso.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #6  
Antiguo 20-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si es así lo tienes que hacer al revés, lo que haces cuando nombras una tabla en el FROM y a su lado pones un nombre X... es definir que X es el alias para la tabla que lo precede, y puedes utilizar X. para aclara que un campo Z pertenece a esa tabla/vista/resultado (Z.X).

Virginia, con toda sinceridad te recomiendo que leas algo de SQL, porque veo que te estás tropezando con conceptos muy básicos, y te aseguro que un Libro o Curso acelerará tu trabajo notablemente.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 21-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Te agradezco la ayuda,

Cita:
te recomiendo que leas algo de SQL, porque veo que te estás tropezando con conceptos muy básicos, y te aseguro que un Libro o Curso acelerará tu trabajo notablemente.
Tienes razón, estoy tropezando con conceptos básicos, pero aunque tengo libros al respecto, no me dejan claros los conceptos, creo que no empiezan desde cero, si me pudieras aconsejar alguno que pudiera servirme... te quedaría muy agradecida.

Saludos

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
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 23:32: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
Copyright 1996-2007 Club Delphi