Viet
14-10-2003, 17:42:08
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 :
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????
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 :
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????