Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   sumar campos calculados (https://www.clubdelphi.com/foros/showthread.php?t=86518)

anubis 25-08-2014 06:40:33

sumar campos calculados
 
Buenas de nuevo,

Estaba buscando en san google y en los foros de clubdelphi pero no he encontrado algo que me sirva.:(

Los campos calculados ya los estoy usando y no hay problema, la cuestion es que tengo un dbgrid con los campos de dos tablas, de ahi genero los campos calculados en el mismo dbgridy no hay problema.
El problema surge cuando quiero sumar un campo calculado que no es el resultado de hacer (campo1+campo2) sino que es un tercer campo que proviene de uno calculado.

Es decir,

tengo en una tabla el campo precio y el campo cantidad, en el campo calculado tengo total
de otra tabla tengo el campo iva y el campo calculado es totaliva (total*iva)/100
Ese ultimo campo es el que quiero hacer la suma de ese totaliva que no me dice que no existe a pesar de que lo he puesto en el query como calculado.

En el dbgrid si me aparece por registro el calculo sin problema, solo que hacer

Código SQL [-]
select * sum(precio*cantidad) as total, sum(totaliva) as totaliva from compras where id_folio=15

Entiendo que al no ser un resultado proveniente de los campos de la tabla no lo encuentre, pero quiza haya otra forma de sumar esos resultados sin tener que hacer un recorrido de la tabla y almacenarlos en una variable.

perdon sino me explique bien y gracias.

ecfisa 25-08-2014 08:55:41

Hola anubis.

Con campos calculados, ¿ Te referis a los creados con el Fields editor del TDataSet ? : Click derecho -> Fields Editor -> New Field -> ...

¿ O a las columnas calculadas ? vg:
Código SQL [-]
CREATE TABLE TABLA(
  ID  INTEGER,
  MONTO NUMERIC(15,3),
  MONTO_IVA COMPUTED BY(MONTO * 0.21) /* columna calculada */
...


Lo que puedo ver en en la consulta SQL, son dos expresiones de función (SUM) y los respectivos alias que las refieren. Si se trata de ellas, no podes utilizarlas mediante su alias ya que esas columnas no tienen existencia fuera de la consulta, tenes que invocar la repetición del cálculo, por ejemplo:
Código SQL [-]
SELECT SUM(T1.CAMPO_1 * T1.CAMPO_2) AS TOTAL,
       SUM(T1.CAMPO_1 * T1.CAMPO_2 + T2.CAMPO_X * T2.CAMPO_Y) AS SUMATOTAL
    /* SUM(TOTAL                   + T2.CAMPO_X * T2.CAMPO_Y) AS SUMATOTAL  ¡ error ! */
FROM TABLA1 T1 INNER JOIN TABLA2 T2 ON T1.ID = T2.ID
WHERE T1.ID = :UN_ID
Espero que se trate de esto último, pero dudo de haber interpretado tu consulta correctamente.

Saludos :)

anubis 28-08-2014 04:20:10

Gracias por responder, ;)

Mira, lo que hice fue añadir dos campos calculados, uno de ellos recoge un campo iva de otra tabla, en el oncalcfields le puse una condicion que si el iva era >0 me hiciera el calculo de iva/1.16 y si es cero no hiciera nada porque da error.
esa columna era lo que queria hacer un sum.

Quiza no es la mejor forma de resolver pero funciona, lo que no pude era hacer un sum, pero lo resolvi recorriendo la tabla y acumulandolo en una variable.
Pero por lo que veo, para hacer un sum de este tipo con condiciones esta complicado hacerlo directamente sobre la tabla, aunque estaba pensando si con un procedure o function en delphi si se pueda.


La franja horaria es GMT +2. Ahora son las 19:30:36.

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