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 23-11-2006
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
Unhappy consulta en Firebird 1.5.3

Hola gente del foro, tengo una consulta que se me cruzó y no puedo sacar un solución limpia en FB para la misma.. si alguno tiene una sugerencia se lo agradeceré:

básicamente quiero computar / filtrar sobre columnas computadas (no de la tabla sobre la que estoy consultando)

Código SQL [-]
select (select ... {consulta compleja}) as A,
         (select ... {consulta compleja}) as B,
         A - B as C <-- no me deja
from XXX
where A <> 0 or B <> 0 <-- también me da error

eso me imaginé no iba a funcionar sabiendo que los where y eso tienen que estar sobre columnas de la tabla base..

el problema es que repeterir la consulta donde uso las referencias a las columnas computadas (suponiendo que el optimizador que no se como funciona no se de cuenta de que está repetida) me duplicaría todo el tiempo de la consulta...

también intente:

select A, B, (A-B) as C from
(
select (select ... {consulta compleja}) as A,
(select ... {consulta compleja}) as B
from XXX
)
where A <> 0 or B <> 0
[/sql]

pero me indica error en la línea 3, invalid token por lo que deduje que un select * from (select * ..)) no es permitido en el firebird..

de más está decir que busco una solución en sql limpia, también podria procesar el dataset resultante por código pero no es la idea..
lo otro que se me ocurre es crear un stored procedure selecteable como en

Código SQL [-]
select A, B, (A-B) as C  from
PROCEDURE_SELECT
where A <> 0 or B <> 0

pero me no me termina de convencer..

alguna idea??

gracias!!
Responder Con Cita
  #2  
Antiguo 24-11-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Si quieres hacer un Select donde contenga SubSelect's si se puede, pero no te funcionarìa un SubSelect con Asterisco * (Select *from....) aqui debes de indicar 1 sòlo campo ò grupos de campos por ejemplo:
Código SQL [-]
select A, B, (A-B)  C from
(
select (select CAMPO1+CAMPO2 {consulta compleja})  A,
(select CAMPO1+CAMPO2  {consulta compleja})  B
from XXX
)
where A <> 0 or B <> 0
[/sql]

Espero haberme explicado.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King
Responder Con Cita
  #3  
Antiguo 24-11-2006
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
clarifico más

si entiendo lo que me indicas y desde ya gracias por tomarte la molestia en leer y responder, pero el problema creo no viene por ahi.. entiendo que un subselect debe devolver un solo campo, generalmente se usan
a) para generar un campo computado: select A, B, (select D + A where..) from X
b) para generar un valor en un predicado del where: select * from X where A = (select B + C from X where...)

aca lo que intento es hacer un select de otro select como en: select A, B, A - B from ( select A, B from XXX where...) where..

dejo la consulta en cuestión super simplificada

Código SQL [-]
select ID_CUENTA, SALDO_COLUMNA1, SALDO_COLUMNA2, (SALDO_COLUMNA1 - SALDO_COLUMNA2) as DIFERENCIA from
(
    select CUE.ID_CUENTA,
        (select sum(DEBE) from MOVIMIENTOS_ASIENTO MVA) as SALDO_COLUMNA1,
        (select sum(HABER) from MOVIMIENTOS_ASIENTO MVA) as SALDO_COLUMNA2
    from CUENTAS CUE
    order by CUE.CODIGO
)
where (SALDO_COLUMNA1 <> 0) or (SALDO_COLUMNA2 <> 0)

la misma me indica:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 5.
select.

gracias!!!
Responder Con Cita
  #4  
Antiguo 30-11-2006
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
termine haciendo un SPs con el select interior y hacieno select sobre el mismo.. no encontre nada mejor
salu2
Responder Con Cita
  #5  
Antiguo 30-11-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
no huebira sido mejor


Código SQL [-]
select f.id_cuenta, sum(m.haber), m.sum(debe),  sum(m.haber)  - sum (debe) from
cuentas f, movimientos m,
where f..id_cuenta = m.id_cuenta


como vez?
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #6  
Antiguo 01-12-2006
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
no..

Cita:
Empezado por Paoti
no huebira sido mejor


Código SQL [-]
select f.id_cuenta, sum(m.haber), m.sum(debe),  sum(m.haber)  - sum (debe) from
cuentas f, movimientos m,
where f..id_cuenta = m.id_cuenta


como vez?
Me parece que no.. partistes de un ejemplo simplificado ya que lo que computo no es un sencillo sum, sino una consulta bastante costosa (mira mi primer post) y (suponiendo) que esta se compute nuevamente en el caso de la resta la consulta en total llevaria el doble de tiempo en concretarse.. dudo mucho que el optimizador se de cuenta que en la columna 3 se usa la diferencia de dos selects de las cols 1 y 2 pero si estoy equivocado que alguien me corriga.. por cierto lo que quería hacer no es posible en FB1.5 pero esta en FB2...!

de la página de reformas en firebird 2:

"Many new additions have been made to the SQL language, including support for derived tables (SELECT ... FROM ( SELECT ... FROM)) with multiple layers of nesting and the ability to join nested sets, as defined by SQL200X."

pueden chequearlo en:
http://www.firebirdsql.org/index.php...d=fb20_release

saludos!
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
Optimizar Consulta en Firebird AGAG4 Firebird e Interbase 14 10-01-2006 02:11:30
Consulta con Firebird senpiterno Firebird e Interbase 1 20-12-2004 23:57:39
Consulta velocidad consultas en Firebird Luisma Firebird e Interbase 3 05-11-2004 23:14:28
Consulta de fechas y horas con Firebird Jordy Firebird e Interbase 5 07-10-2004 16:51:52
Ambiguos consulta en firebird fidias Firebird e Interbase 3 10-03-2004 16:07:56


La franja horaria es GMT +2. Ahora son las 12:39:43.


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