Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2008, 09:56
jacquibr
 
Fecha de Ingreso: noviembre-2008
Mensajes: 1
Antigüedad: 16 años
Puntos: 0
Update estatico,al realizarlo a una misma tabla

Estoy desarrollando un proceso que hace una evaluación de un Pareto para los saldos de una cartera de clientes,
para esto tengo # campos en una tabla,

Primer campo ;Id cliente
que es en donde está el orden de los clientes

Segundo campo: codigocliente
que es donde se encuentran los codigos de los clientes

Tercer campo : saldo

Que es donde se encuentra los saldos de los clientes ordenados de mayor a menor

Cuarto campo: Peso
Que es el valor que se obtiene de dividir cada saldo de un cliente entre el total de la suma de los saldos de todos los clientes

Quinto campo: Acumulado1
Que es el campo en donde se obtiene el valor de hacer una suma acumulativa de los pesos,es decir el primero tiene el peso inicial , el segundo
tendría la suma del primer peso mas el segundo y asi consecutivamente

Sexto campo: Pareto1
Que es el campo en donde se hace la logica del pareto ,aquellos clientes que tengan un valor menor o igual a 80% en el campo Acumulado uno obtiene un valor de 80 y aquellos que son mayores de 80
obtienen un valor de 20


Septimo campo : Tipo1
Aca se tiene el tipo de cliente segun el valor obtenido en Pareto1,los que en Pareto 1 tuvieron valores de 80 se les da el tipo cliente premium



Luego viene un segundo analisis sobre los que obtuvieron en Pareto1 el valor de 20, para esto se tiene un nuevo total de los saldos
de los clientes que solo estan con valor 20 en Pareto 1,y entonces en el nuevo campo acumulado 2 se realiza la división entre
el saldo del cliente entre el nuevo total y asi sigue el mismo analisis anterior para el nuevo campo Pareto2, en donde para
los que en Pareto2 obtienen valores de 80 se les da en la columna tipo el nombre de cliente preferente y para los que obtienen el valor de 20 se les da el tipo cliente



Mi problema es que para hacer todo este analisis yo realizo un update a la tabla que tiene estos campos que se llama BDS.T_SALDO_PARETO_ORIG, de esta manera:


/*IDENTIFICANDO A LOS CLIENTES PREMIUM */

update BDS.T_SALDO_PARETO_ORIG t
set (acumulado1,pareto1,tipo)=(select sum(saldo)*100/total,
(case when sum(saldo)*100/total<=80 then 80 else 20 end),
(case when sum(saldo)*100/total<=80 then 'BUEN CLIENTE' else NULL end)
from BDS.T_SALDO_PARETO_ORIG_D where id_cliente<=t.id_cliente);
commit;

/*IDENTIFICANDO A LOS CLIENTES NORMAL Y BASICO: SOLO EVALUAR REGISTROS CON PARETO=20*/

select sum(saldo) into total from BDS.T_SALDO_PARETO_ORIG WHERE PARETO1=20;

update BDS.T_SALDO_PARETO_ORIG t
set (acumulado2,pareto2,tipo)=(select sum(saldo)*100/total,
(case when sum(saldo)*100/total<=80 then 80 else 20 end),
(case when sum(saldo)*100/total<=80 then 'CLIENTE REGULAR' else 'MAL CLIENTE ' end)
from BDS.T_SALDO_PARETO_ORIG_D where id_cliente<=t.id_cliente and pareto1=20),
peso2=saldo*100/total
where pareto1=20;
commit;
---


pero al hacer el update se queda en nada ,es como si se quedara paralizado no avanza por horas, consulté y me dijeron porque como
la tabla se hace update asi mismo puede estar obstruyendose porque lo que hacía antes era desarrollar con 2 objetos de la misma tabla
este update ,pero ahora cree otra tabla identica solo con los valores iniciales de IDCLIENTE,CODIGO,SALDO Y PESO
y dejé el query como está arriba, osea ahora solo la tabla BDS.T_SALDO_PARETO_ORIG debería actualizarse a partir de
BDS.T_SALDO_PARETO_ORIG_D, pero igual sigue de la misma manera, el dba me dice que está como si se hubiera quedado pegado en un datafile
y no hace nada.


Por favor necesito ayuda para resolver este problema lo mas pronto posible, o si existe otra manera de realizar esta evaluación.Gracias.