FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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á :) |
#2
|
||||
|
||||
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 Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, (SELECT SUM(IMPHABER, IMPDEBE) FROM ECONO) TOTAL FROM ECONO Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, (SELECT SUM(IMPHABER, IMPDEBE) FROM ECONO E2 WHERE E1.NUMCLI=ED.NUMCLI) TOTAL FROM ECONO E1 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. |
#3
|
|||
|
|||
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:
Cita:
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á :) |
#4
|
||||
|
||||
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. |
#5
|
|||
|
|||
Hola,
Cita:
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:
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á :) |
#6
|
||||
|
||||
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. |
#7
|
|||
|
|||
Te agradezco la ayuda,
Cita:
Saludos Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
|
|
|