PDA

Ver la Versión Completa : Ayuda con consulta.


sargento elias
06-06-2008, 16:08:17
Buenas tardes.

Necesito ayuda con esta consulta que se me atraganta.
Tengo 4 tablas. DEP con (ID,NOM),SUR con (ID,IDDEP), LLE con (ID,IDDEP,LIT,FEC) y REP(ID,IDSUR,LIT,FEC).Las claves ajenas son ID+nomtabla

Le voy a pasar por parámetros el NOM de la tabla DEP y y una fecha cualquiera. Necesito sacar la suma de los litros de LLE, la suma de los litros de REP, y la diferencia de las dos, según depósito y hasta la fecha introducida.

Espero haberme explicao bien, que follón, :D
Asias.

PD:la quiero ejecutar en Delphi7

poliburro
06-06-2008, 22:28:04
Select Dep.Id, Isnull(LLE.SumLitLLe,0) SumLitLle,
isnull(Rep.SumLitRep,0) SumLitRep,
Isnull(LLE.SumLitLLe,0) - isnull(Rep.SumLitRep,0) LitDif
From Dep As Dep
Left Join (
Select Id, Sum(Lit) As SumLitLLe
From LLE
Where Fec >= :FecIni And
Fec <= :FecIni
) LLE
On Dep.Id = LLE.Id
Left Join (
Select Id, Sum(Lit) As SumLitRep
From Rep
Where Fec >= :FecIni And
Fec <= :FecIni
) Rep
On Dep.Id = Rep.Id
Where Dep.Nom = :Nom

sargento elias
08-06-2008, 10:56:03
Muchas gracias es casi perfecta.;)

sargento elias
09-06-2008, 14:12:17
Tengo un par de problemas con la consulta. Me marca error en Delphi y Firebird1.5 (IBexpert) (que no te comente) en el left join, quizás por llevar la select detrás.

left join (select -------> ahí me marca el error.(en select)

Y luego hay un error, creo, para enlazar dep y rep has de pasar por sur. DEP.ID=SUR.IDDEP Y SUR.ID =REP.IDSUR


Select Dep.nom,coalesce(sum(rep.lit),0) SumLitRep
From Dep left join ( sur inner join rep on sur.id = rep.idsur)
on dep.id = sur.iddep where rep.fec <= :fecha and dep.cod = :cod
group by 1



Select Dep.NOM, coalesce(sum(lle.lit),0) SumrepRep
From Dep
left join
lle on lle.iddep = dep.id
where lle.fec <= :fecha and dep.nom= :nom
group by 1


El caso es que así me funcionan, pero no logro hacerlo todo en una misma consulta, y el union no me vale, puesto que quiero sacar la diferencia entre ambos.

poliburro
09-06-2008, 14:18:26
Tengo un par de problemas con la consulta. Me marca error en Delphi y Firebird1.5 (IBexpert) (que no te comente) en el left join, quizás por llevar la select detrás.

left join (select -------> ahí me marca el error.(en select)


El caso es que así me funcionan, pero no logro hacerlo todo en una misma consulta, y el union no me vale, puesto que quiero sacar la diferencia entre ambos.


FireBird no es un motor de base de datos que me guste, por lo tanto no podré ayudarte a pulir tu consulta. Espero que alguno de los expertos en este motor pueda ayudar.

Saludos

celades1
09-06-2008, 15:15:33
Hola

Creo que firebird 1.5 no se puede hacer

Left Join (
Select Id, Sum(Lit) As SumLitLLe
From LLE
Where Fec >= :FecIni And
Fec <= :FecIni
) LLE






Pasate fierbird 2.0 o 2.1 y esta select te funcionara perfectamente

pd tienes a diposición un foro de intebase-firebird

Saludos