Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2004
cartmanrules cartmanrules is offline
Miembro
 
Registrado: may 2004
Posts: 16
Poder: 0
cartmanrules Va por buen camino
Solucionado! Muchas gracias por vuestra ayuda
Responder Con Cita
  #2  
Antiguo 21-04-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
Hola, revivo este hilo porque tengo una duda similar:

Supongamos que mi subconsulta es muy muy muy compleja.

¿habría otra forma de hacerlo?, es decir, sí podría realizarlo como recomiendan en este hilo. Pero lo que no quiero hacer es tener que ejecutar ese subconsulta dos veces (una para mostrar el valor y otra para calcular el porcentaje).

¿Alguna idea para evitar ejecutar la subconsulta dos veces ?
__________________

Responder Con Cita
  #3  
Antiguo 21-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por ContraVeneno Ver Mensaje
Hola, revivo este hilo porque tengo una duda similar:

Supongamos que mi subconsulta es muy muy muy compleja.

¿habría otra forma de hacerlo?, es decir, sí podría realizarlo como recomiendan en este hilo. Pero lo que no quiero hacer es tener que ejecutar ese subconsulta dos veces (una para mostrar el valor y otra para calcular el porcentaje).

¿Alguna idea para evitar ejecutar la subconsulta dos veces ?
Hola Contra, ¿tu te refieres a evitar hacer ese encadenamiento, que en ocasiones es un tanto molesto, para evitar lanzar varias subconsultas que al final es todo lo "mismo"?
Si es eso... lamentablemente si uno desea hacerlo a través de sólo consultas SQL no se puede hacerlo de una simple pasada.
Estos tipos de requisitos (como en este caso el porcentajes sobre el total) exigen dos pasadas.... Es a mi modo de ver... algo dificil (por no decir imposible) de un solo tirón.

Una alternativa es llevar un registro de dicha información ya procesada. Es decir que puede que sea más conveniente llevar alguna tabla "auxiliar" en donde lleves cálculos parciales de aquellas operaciones complejas. De este modo puede que con simples consultas (a lo mejor un poco más complicada pero seguramente más sencillas que estar realizando anidamientos) a dicha tabla.

Se que no te he dado la solución, pero al menos es una alternativa.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 21-04-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Bueno, compañeros... eso depende de las capacidades del motor. Si es oracle, firebird 2.0 o SQL Server, podrías hacer esto, que suelen llamar inline views o tablas derivadas:

Código SQL [-]
select q1.total_gordo, q1.total_general, 100 * q1.total_gordo / q1.total_general
  from (  
      Select sum(l.lin_kgsnetos) Total_gordo, 
               (Select sum(lin_kgsnetos) from lineas_entrada l2 where l2.lin_socio = l.lin_socio) total_general,
        from lineas_entrada l
       where lin_socio = 4
         and lin_variedad = 'GORDO'
  ) q1;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 21-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por jachguate Ver Mensaje
Bueno, compañeros... eso depende de las capacidades del motor. Si es oracle, firebird 2.0 o SQL Server, podrías hacer esto, que suelen llamar inline views o tablas derivadas:

Código SQL [-]select q1.total_gordo, q1.total_general, 100 * q1.total_gordo / q1.total_general
from (
Select sum(l.lin_kgsnetos) Total_gordo,
(Select sum(lin_kgsnetos) from lineas_entrada l2 where l2.lin_socio = l.lin_socio) total_general,
from lineas_entrada l
where lin_socio = 4
and lin_variedad = 'GORDO' ) q1;


Hasta luego.

Hola Juan
Te hacía en el evento... ¿una pequeña escapadita?

No he probado hacer una consulta como la que expones... No te voy a desafiar tus conocimientos porque se que sabes mucho del tema.

Yo estoy interpretando a lo que comenta Contra como que quiere evitarse estar haciendo esas series de subconsultas.

Yo andaba pensando en la idea de que si es posible tener una tabla con algunos datos que provengan de algunos cálculos de este modo se podría llegar a alivianar la consulta SQL haciendo la consulta sobre esta tabla y no sobre la "original".
No se si se entiende la idea.
O yo estoy confundido.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 21-04-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
De echo maese Jachguate, además del promedio, estoy haciendo un "in line view" como mencionas. Que el SQL Server funcionan de maravilla y en muchas ocasiones me han sacado de muchos apuros.

He buscando en algunos lados y siempre he terminado con las mismas tres opciones: Un procedimiento almacenado, que funcionaría muy bien, pero mi consulta no es tan tan compleja como para un procedimiento. Una tabla derivada que funciona bien, pero igual tengo que ejecutar dos veces la subconsulta. Y la tercera, que es la misma subconsulta dos veces.

Al final voy a aprovechar las ventajas de la tabla derivada. Y sirve que tengo la opción de mostrar dos niveles de datos: Agrupados (con la tabla derivada) y sin agrupar (sin la tabla derivada ).

Gracias por su tiempo de cualquier manera.
__________________

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 15:57:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi