Foros Club Delphi

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

sargento elias 06-06-2008 16:08:17

Ayuda con consulta.
 
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

Código SQL [-]
         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

Código SQL [-]
 
 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

Código SQL [-]
 
 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

Cita:

Empezado por sargento elias (Mensaje 292207)
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
Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 03:09:54.

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