PDA

Ver la Versión Completa : Multiples consultas con Firebird.


FerJavRec
22-02-2013, 22:34:43
Hola buenas tardes, estoy trabajando con Delphi 2010 y Firebird 2.5 y tengo una consulta que realizo y funciona bien. Ahora estoy medio trabado y no me doy cuenta de como puedo hacer para obtener un campo con una (suma - resta) de los valores obtenidos en la consulta.
Acá pongo un ejemplo:


with dm1.Consultas do
begin
close;
sql.Clear;
sql.Add('SELECT mo.coop, coo.razon_social,');
sql.Add('(SELECT sum(importe) as total_fac FROM movimientos c1 where c1.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''F''),');
sql.Add('(SELECT sum(importe) as total_rec FROM movimientos c2 where c2.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''R''),');
sql.Add('(SELECT sum(importe) as total_ntc FROM movimientos c3 where c3.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''N''),');
sql.Add('coo.saldo_inicial FROM movimientos mo');
sql.Add('LEFT JOIN cooperativas coo on (mo.coop = coo.coop)');
sql.Add('WHERE mo.coop IN (SELECT coop FROM cooperativas where activa = ''si'')');
sql.Add('GROUP BY mo.coop, coo.razon_social, coo.saldo_inicial');
open;

end;


El campo tendria que contener el resultado de:

resultado = ( (total_fac-(total_rec+total_ntc) )

Bueno muchas gracias por su atencion.
saludos

Casimiro Notevi
22-02-2013, 23:02:38
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

Hola, el select que has puesto devolverá los campos:
mo.coop, coo.razon_social, total_fac, total_rec, total_ntc, coo.saldo_inicial

Y esto que dices no se entiende entonces:
El campo tendria que contener el resultado de:
resultado = ( (total_fac-(total_rec+total_ntc) )

FerJavRec
22-02-2013, 23:11:43
Hola muchas gracias por tu bienvenida.
Mira ya lo solucione. Yo necesitaba un campo que tenga la suma/resta de los valores obtenido en las consultas.

asi lo soluccione:

with dm1.Consultas do
begin
close;
sql.Clear;
sql.Add('SELECT mo.coop, coo.razon_social,');
sql.Add('((SELECT sum(importe) as total_fac FROM movimientos c1 where c1.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''F'')-');
sql.Add('((SELECT sum(importe) as total_rec FROM movimientos c2 where c2.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''R'')+');
sql.Add('(SELECT sum(importe) as total_ntc FROM movimientos c3 where c3.coop = mo.coop AND fecha <= ''12/31/2012'' AND tipo = ''N''))) as sumatotal,');
sql.Add('coo.saldo_inicial FROM movimientos mo');
sql.Add('LEFT JOIN cooperativas coo on (mo.coop = coo.coop)');
sql.Add('WHERE mo.coop IN (SELECT coop FROM cooperativas where activa = ''si'')');
sql.Add('GROUP BY mo.coop, coo.razon_social, coo.saldo_inicial');
open;
end;



El campo con el resultado lo tengo en sumatotal. Perdón si no soy demasiado claro.
muchas gracias.
saludos