Club Delphi  
    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 14-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Consulta - MSSQL

Buenas Coleguas:

Estoy realizando unos procesos que procesan muchos datos con algunas formulas simples, el tema es que uno de los resultados utiliza otro de los resultados y estoy dando al DBMS doble trabajo en que calcule ambas veces lo mismo. Osea, dentro del mismo bloque SELECT tengo PromedioTT y Requeridas, donde cuando tengo que calcular requeridas uso el resultado de PromedioTT, pero como no se como tomar el resulrado de la columna anteriormente calculada la calculo nuevamente .

Este es el cod :
Código:
 
Select 
ROUND( 
  (
    
    case  SUM(ai.callsanswered)
  when 0 then 0
        else  (  cast (SUM(ai.talktime) as float /*(10,6 )*/)
                / 
                cast (  SUM(ai.callsanswered) as float /*(10,6 )*/)
               )
     end
   
  ) +
  (
    case  max(ll.atendidas)
       when 0 then 0
       else (   cast (min(ll.no_listo)as float /*(10,6)*/)
                  / 
                cast (max(ll.atendidas)as float /*(10,6)*/)
        )
    end 
)
  , 0) AS avgtalktime,


/* requeridas    =  */
ROUND(
(
 cast ( SUM(ai.callsanswered)as float (10,5))
 *
 (
      case  SUM(ai.callsanswered)
  when 0 then 0
        else  (  cast (SUM(ai.talktime) as float /*(10,6 )*/)
                / 
                cast (  SUM(ai.callsanswered) as float /*(10,6 )*/)
               )
      end
    + 
      case  max(ll.atendidas)
       when 0 then 0
       else (   cast (min(ll.no_listo)as float /*(10,6)*/)
                  / 
                cast (max(ll.atendidas)as float /*(10,6)*/)
        )
      end 
  )
 )
 /
  cast( avg(g.objetivo_conversacion) as decimal (10,5)
)
,0) AS required ........//sigue la consulta
La pregunta es entonces, saben como puedo hacerlo de modo mas eficiente usando avgtalktime????
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #2  
Antiguo 14-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
jejeje... veo el codigo que he puesto y esta algo complicadi !!!!

tal vez con este ejemplo quede mas claro

Esto estoy haciendo :
Código:
 
  Select Sum(campo1) as suma,   
  Sum(campo1)/AVG(campo2).........
Esto me gustaria hacer:
Código:
 Select Sum(campo1)as suma,
  suma/AVG(campo2).......
Esta mas claro?
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #3  
Antiguo 14-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Me temo que vas a volver a tener que usar cursores o tablas temporales.

NOTA : En Interbase / Firebird si que se puede hacer de una forma muy elegante, mediante un procedimiento almacenado y un bucle for select :

Código:
create procedure Listado
returns (ID Integer, SUMA Integer, CALCULO integer)

declare variable MEDIA integer;
begin
  for select ID from Tabla1 into :ID
  do begin

    select sum(Campo1), avg(Campo2)
    from Tabla2
    where ID = :ID
    into :SUMA, :MEDIA;

    :CALCULO = :SUM / :MEDIA;

    suspend;

  end
end
Lamentablemente lo unico parecido en SQL Server són los cursores.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 15-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Gracias Marc....

cuando mas conozco las ventajas de SQLServer, mas quiero los DBMS Freeware!!!!

Saludos
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #5  
Antiguo 15-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Antes trabajaba mucho con SQL Server, y me parece un producto muy bueno (de lo mejorcito que ha sacado Microsoft), el Transact-SQL es muy completo, una documentación magnífica, etc. ...

Pero ahora solo trabajo con Firebird y estoy encantado con él. Es mucho más adecuado para mis aplicacions que SQL Server (requiere muchos menos recursos, es muy facil de instalar integrado con la aplicación, etc. ....). Le faltan algunas cosas : tablas temporales (las utilizaba mucho en SQL Server, pero en Firebird aún no las he necesitado nunca debido a la mejor estructura de recorrido y devolución de datos en procedimientos almacenados, en todo caso siempre se pueden simular con tablas permanentes), acceso simultano a distintas bases de datos, ...

Aún con estas carencias, Firebird tiene sus propios puntos fuertes (por ejplo. los bloqueos y transacciones). Así que dentro de su modestia y sin desmerecer SQL Server, Firebird es un producto magnífico que lo puede reemplazar perfectamente en muchos casos.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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 18:00: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