Bases de Datos - consulta cruzada con sum

 
Vista:

consulta cruzada con sum

Publicado por Celine (1 intervención) el 24/07/2007 18:16:52
tenemos 3 tablas con los siguientes campos:
divisa = id
compra = id,divisa,cantidad,establecimiento,fecha
venta = id,divisa,cantidad,establecimiento,fecha

cantidad es decimal
establecimiento es 'S' o 'N'

queremos la una tabla con las siguientes columnas:

divisa.id
sum(compra.cantidad) y establecimiento='N' (cc)
sum(compra.cantidad) y establecimiento='S' (ce)
sum(venta.cantidad) y establecimiento='N' (vc)
sum(venta.cantidad) y establecimiento='S' (ve)

he probado muchos querys, y el que más se acerca es:

SELECT distinct T1.ID,T2.CC,t3.ce,t4.vc,t5.ve
from
(SELECT distinct DIVISA.id
from divisa,compra,venta
where (divisa.id=compra.divisa and compra.fecha between '2007-07-01' AND '2007-10-01')
or (divisa.id=venta.divisa and venta.fecha between '2007-07-01' AND '2007-10-01'))
T1,
(SELECT distinct DIVISA.id,sum(cast(COMPRA.CANTIDAD as decimal(15,4))) as cc
from (DIVISA RIGHT JOIN COMPRA ON ((divisa.id=COMPRA.DIVISA)and (COMPRA.FECHA BETWEEN '2007-07-01' AND '2007-10-01')))
where COMPRA.ESTABLECIMIENTO='N' group by divisa.id)
t2,
(SELECT distinct DIVISA.id,sum(cast(compra.CANTIDAD as decimal(15,4))) as ce
from (DIVISA RIGHT JOIN COMPRA ON divisa.id=COMPRA.DIVISA)
where COMPRA.ESTABLECIMIENTO='S' AND COMPRA.FECHA BETWEEN '2007-07-01' AND '2007-10-01'
group by divisa.id)
t3,
(SELECT distinct DIVISA.id,sum(cast(venta.CANTIDAD as decimal(15,4))) as vc
from (DIVISA RIGHT JOIN venta ON divisa.id=venta.DIVISA)
where venta.ESTABLECIMIENTO='N' AND venta.FECHA BETWEEN '2007-07-01' AND '2007-10-01'
group by divisa.id)
t4,
(SELECT distinct DIVISA.id,sum(cast(venta.CANTIDAD as decimal(15,4))) as ve
from (DIVISA RIGHT JOIN venta ON divisa.id=venta.DIVISA)
where venta.ESTABLECIMIENTO='S' AND venta.FECHA BETWEEN '2007-07-01' AND '2007-10-01'
group by divisa.id)
t5
where (t1.id=t2.id and t1.id=t3.id) and (t1.id=t4.id and t1.id=t5.id)
group by t1.id,t2.cc,t3.ce,t4.vc,t5.ve

pero como existe solo una venta a cliente para una de la divisas y no para la otra, no se muestran todas las divisas
para las que hay compras o ventas en una fecha, el resultado es:

divisa.id cc ce vc ve
1 13333.00 4444.00 35000.00 12777.00

Cuando debería ser:
divisa.id cc ce vc ve
1 13333.00 4444.00 35000.00 12777.00
4 3790.00 1000.00 00.00 2500.00

La última tabla se hace con java si alguien puede explicarme como pasar un tableModel al jasperReports también me valdría.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:consulta cruzada con sum

Publicado por Leopoldo Taylhardat (187 intervenciones) el 27/07/2007 00:41:46
Saludos...

Crea una tabla "de trabajo" y un procedure que te genere todos los cruces que necesites así no tengan datos...
Luego te traes los datos desde esa tabla...

al principio del procedimiento debes limpiar los datos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar