Foros Club Delphi

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

sargento elias 14-04-2008 13:39:20

consulta
 
Buenos dias, queria saber si puedo montar esto en una consulta.

Tengo una tabla A (tipo,fecha,importe)

el Tipo es pago o cobro. Necesito obtener, el sumatorio de pagos, el sumatorio de cobro, y la diferencia entre ambos, ordenado por fecha en la misma consulta si puede ser.

Es para mostrarlo en un informe de Repord Builder.Si hay alternativas a la única consulta las acepto :)

gracias.

MaMu 14-04-2008 14:42:43

Cita:

Tengo una tabla A (tipo,fecha,importe)

el Tipo es pago o cobro. Necesito obtener, el sumatorio de pagos, el sumatorio de cobro, y la diferencia entre ambos, ordenado por fecha en la misma consulta si puede ser.

Código SQL [-]
 
select C.id,
(select SUM(A.importe) from tabla A where A.tipo="cobro" and A.id=C.id) as SumaCobro,
(select SUM(B.importe) from tabla B where B.tipo="pago"and B.id=C.id) as SumaPago,
((select SUM(D.importe) from tabla D where D.tipo="cobro" and D.id=C.id)-

(select SUM(E.importe) from tabla E where E.tipo="pago" and E.id=C.id))as DiferenciaCobroPago
from tabla C order by fecha

No tengo ni Delphi ni SQL a mano, pero debería ser algo similar, no creo estar tan pero tan errado. Capaz algo te orienta a que te des cuenta.

Saludos

sargento elias 14-04-2008 16:30:15

que crack!!
 
Genial, muchisimas gracias.....

Sabes como hacer que los campos vacios(nulos) los convierta a 0? por que si me saca nulos esa fila ya no me opera.

bismarck_sierra 14-04-2008 17:29:46

Convertir nulos a ceros depende del manejador de base de datos que utilices, por ejemplo, en firebird es COALESCE.

El ejemplo de consulta que te proporcionó "mamu" funciona en cualquier manejador, pero si quieres optimizarla ya sería dependiendo de cual utilices, en firebird puedes utilizar CASE, como comentas que es en una sola tabla, con CASE solo harías un sólo SELECT, en lugar de 5.

Saludos

sargento elias 14-04-2008 17:40:38

coalesce
 
es firebird 1.5 , pero como aplico el coalesce en la consulta de arriba, dentro del parntesis de cada campo? despues del select?help

hecospina 15-04-2008 01:14:45

Debe funcionar asi :

Código SQL [-]
select SUM(coalesce(A.importe,0)) from tabla A

bismarck_sierra 15-04-2008 17:26:39

consulta optimizada
 
Si te entendí bien, una consulta optimizada sería así:

Código SQL [-]
SELECT fecha, 
COALESCE(SUM(CASE tipo WHEN 'PAGO' THEN importe END), 0) AS pagos,
COALESCE(SUM(CASE tipo WHEN 'COBRO' THEN importe END), 0) AS cobros, 
SUM(COALESCE(CASE tipo WHEN 'COBRO' THEN importe END, 0) -
COALESCE(CASE tipo WHEN 'PAGO' THEN importe END, 0))  AS diferencia
FROM tabla GROUP BY fecha

Sólo asegurate de tener un índice sobre el campo fecha.

Saludos


La franja horaria es GMT +2. Ahora son las 21:46:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi