Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
Duda con consulta y firebird 2.1

Buenas tardes, tengo un par de problems.

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.

Esta es la solución que me han dado:

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

Pero Firebird 1.5 no admite el left join(select , como lo podría hacerlo en una consulta?

Y mi segunda duda es que si me instalo firebird 2.1 (que me han recomendado para solucionar este problema), perdería las bases que tengo hechas en 1.5? tendría que hacer algun tipo de instalación extra? IBexpert funcionaría igual?O no cambia nada en ese sentido? Gracias y perdón por la duplicidad de posts.
Responder Con Cita
  #2  
Antiguo 09-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Debes hacer Backup de la BD 1.5 i restore con 2.0 o 2.1

Yo Aun estoy utilizando la ultima version de 2.0 ya que la version 2.1
hace muy poco que ha salido y solo la he probado unos dias pero mis aplicaciones siquen corriendo con 2.0.
Yo te aconsejaria pasar a 2.0.

Yo habia trabajado con 1.5 y pase a 2.0 sin problemas.

en cuanto a la pregunta ya te conteste en el otro foro y puedo
asegurarte que que en 2.0 te funcionara o sea se pude hacer from de una select por tanto creo que logicamente tambien se puede hacer join de una select


Saludos
Responder Con Cita
  #3  
Antiguo 09-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
gracias

Gracias celades1, lo he vuelto a preguntar por que si me la resuelven me ahorro instalar el 2.0 en todas las máquinas, que además lo he de consultar primero, aunque lo tendré que hacer de todas maneras. Gracias por tu ayuda.
Responder Con Cita
  #4  
Antiguo 09-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Hombre de poca fe
te loacabo de probar algo parecido a lo tuyo i funciona
Código SQL [-]
select r.vaca,coalesce(la.num1,0)
from repr r
left join (select i.registrer,count(*) num1 from
insemina i
group by i.registrer) la on  la.registrer=r.registre

Si tienes mas dudas , pregunta

Saludos
Responder Con Cita
  #5  
Antiguo 09-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
Si te creo hombre, pero es que tengo un monton de bases de datos, y soy novel y no me gustaría fastidiarla, aunque la curiosidad me corroe asi que entonces explicame que pasos sigo, Instalo firebird 2.0 (hecho) no se como hacer lo del Backup...help me!
Responder Con Cita
  #6  
Antiguo 09-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Antes de de instalar el 2.0 debes hacer backup de todas tus BD (sino prueba solo con una y guarda la version de esa bd en 1.5)
Luego desinstalas Firebird 1.5
Instalas 2.0
Restore de la BD

Haces todas las pruebas y cuando quieras si decides volver a la 1.5 desinstalas la 2.0 y vuelves a instalar la 1.5 (Cosa que seria absurda ya que con 2.0 ira todo bien)

Para hacer Backup i restore yo utilizo ibexpert que es una herramienta como muchas otras que hay para trabajar con bd en services tienes las dos opciones.

Todo esto es lo que yo hice para probar la v 2.1 y tampoco tuve problemas pero opte por volver a la 2.0 y esperar otro momento para hacer el cambio

Realmente si no haces backup y restore seguramente que la 2.0 te abriria la bd sin problemas (pero es aconsejable hacer backup i restore). Lo que una vez abierta la Bd con 2.0 es muy probable que esa Bd fisica nop tela pueda abrir la 1.5

No se si me he explicado
No te puedo seguir mas el hilo, ya que un cliente me ha llamado y me voy

Animos
Responder Con Cita
  #7  
Antiguo 09-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
entendido gracias
Responder Con Cita
  #8  
Antiguo 10-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
buenassss!

Ya tengo mi versión 2.0 aunque sigo teniendo un problema con la consulta:

Código SQL [-]
Select Dep.Id, coalesce(SumLitLLe,0) SumLitLle,
                  coalesce(SumLitRep,0) SumLitRep,
                  coalesce(SumLitLLe,0) - coalesce(SumLitRep,0) LitDif
           From Depositos  Dep
      left  Join (Select id, Sum(Lit) SumLitLLe,iddep
                       From LLEnado  lle
                     Where Fec <= :Fecha  group by 1,3) LLEnado
              On Dep.Id =  LLEnado.Iddep
               
      Left  Join (Select rep.id, Sum(rep.Lit) SumLitRep,sur.iddep
                       From Repostaje Rep inner join Surtidor sur on rep.idsur = sur.id
                    where Fec <= :Fecha  group by 1,3) Sur
             On sur.iddep = dep.id
        Where Dep.cod = :cod

id Sumlitlle Sumlitrep Diflit
42 100 10 90
42 100 20 80
42 100 30 70
42 200 10 190
42 200 20 180
42 200 30 170

Cuando el resultado debería ser

id Sumlitlle Sumlitrep Diflit
42 300 60 240
A ver si se os ocurre algo, acias
Responder Con Cita
  #9  
Antiguo 10-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

No tengo claro las tablas pero no veo la necesidad de poner los id en los dos group by


Código SQL [-]
Select Dep.Id, coalesce(SumLitLLe,0) SumLitLle,                  coalesce(SumLitRep,0) SumLitRep,                  coalesce(SumLitLLe,0) - coalesce(SumLitRep,0) LitDif           From Depositos  Dep      left  Join (Select Sum(Lit) SumLitLLe,iddep                       From LLEnado  lle                     Where Fec <= :Fecha  group by 2) LLEnado              On Dep.Id =  LLEnado.Iddep                     Left  Join (Select  Sum(rep.Lit) SumLitRep,sur.iddep                       From Repostaje Rep inner join Surtidor sur on rep.idsur = sur.id                    where Fec <= :Fecha  group by 2) Sur             On sur.iddep = dep.id        Where Dep.cod = :cod


Otra Solucion diferente podria ser



Código SQL [-]
 
Select Dep.Id,(Select Sum(Lit) From LLEnado  lle             Where Dep.Id =  LLE.Iddep and lle.Fec <= :Fecha ) SumLitLLe ,              (Select  Sum(rep.Lit) From Repostaje Rep               inner join Surtidor sur on rep.idsur = sur.id              where sur.iddep = dep.id AND Fec <= :Fecha) SumLitRep,             (Select Sum(Lit) From LLEnado  lle             Where Dep.Id =  LLE.Iddep and lle.Fec <= :Fecha )-             (Select  Sum(rep.Lit) From Repostaje Rep               inner join Surtidor sur on rep.idsur = sur.id              where sur.iddep = dep.id AND Fec <= :Fecha) LitDif           From Depositos  Dep


Saludos
Responder Con Cita
  #10  
Antiguo 10-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
Gracias, funciona.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con estado de consulta m.ruiz SQL 6 29-10-2007 16:46:27
Duda sobre consulta utopico SQL 3 13-09-2007 21:11:27
Duda con consulta enecumene Conexión con bases de datos 2 07-03-2007 03:54:41
duda con una consulta LIKE en MySQL enecumene MySQL 6 06-02-2007 21:06:46
Duda en consulta SQL BlueSteel SQL 2 18-05-2005 23:22:27


La franja horaria es GMT +2. Ahora son las 14:15:34.


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
Copyright 1996-2007 Club Delphi