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 |
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 Código:
SELECT SUM(IMPHABER-IMPDEBE) AS IMPORTE Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, Código:
SELECT NUMCLI, (IMPHABER-IMPDEBE) PARCIAL, Saludos! |
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 |
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! |
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 |
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! |
Te agradezco la ayuda,
Cita:
Saludos Virginia |
La franja horaria es GMT +2. Ahora son las 15:40:17. |
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