NO USAR CURSOR SQL2000

04/07/2007 - 04:52 por Miguel Angel Juárez Herrera | Informe spam
Saludos amigos.
Pues estoy tratando de cambiar mi forma de programar con cursores.
Tengo un ejemplo que no encuentro como resolverlo, espero alguien me pueda
auxiliar.
El escenario es el siguiente, tengo una tabla con una clave de cliente,
nombres, y total de ventas.
obtengo el valor del total de las ventas y obtengo el total del 80% y del 20%
Los clientes cuyas ventas representen el 80% del total del ingreso son "a" y
los que representan el 20% son "B"
Yo con un cursor ordeno descendentemente por el campo de totalventas, y así
recorro cliente por cliente y voy sumando desde el que mas vende hasta el que
menos y voy poniendoles "A" hasdta completar el 80%, luego la comparación del
ultimo 20 % s eles pone "b"
y mi cursor queda así:

select @total = sum(mesactualacumulado) from Rpt600AB
set @a = @total * .8
set @b = @total * .2
set @total = 0
DECLARE CurAB CURSOR FORWARD_ONLY FOR
select ruta, nud, mesactualacumulado from Rpt600AB order by
mesactualacumulado desc, vtamesAnt1 desc, vtamesAnt2
open CurAB
FETCH NEXT FROM CurAB INTO @ruta, @nud,@mesactualacumulado
WHILE @@FETCH_STATUS = 0
BEGIN
set @total = @total + @mesactualacumulado
if @total <= @a
begin
update Rpt600AB set tipocliente = '80' where nud =
@nud and ruta = @ruta and mesactualacumulado = @mesactualacumulado
end
else
if (@total <= (@a + @b)) and (@total > @a)
begin
update Rpt600AB set tipocliente = '20' where
nud = @nud and ruta = @ruta and mesactualacumulado = @mesactualacumulado
end
FETCH NEXT FROM CurAB INTO @ruta,
@nud,@mesactualacumulado
END
CLOSE CurAB
DEALLOCATE CurAB


existe alguna manera de no hacerlo por cursor?..
Gracias.




Miguel Angel Juárez Herrera.
Programador (NET, VB6 y SQL 2000).
Sistemas GEUSA
 

Leer las respuestas

#1 Carlos M. Calvelo
04/07/2007 - 11:48 | Informe spam
On 4 jul, 04:52, Miguel Angel Juárez Herrera
<mjuarezh36(antispam)@yahoo.com.mx> wrote:
Saludos amigos.
Pues estoy tratando de cambiar mi forma de programar con cursores.
Tengo un ejemplo que no encuentro como resolverlo, espero alguien me pueda
auxiliar.
El escenario es el siguiente, tengo una tabla con una clave de cliente,
nombres, y total de ventas.
obtengo el valor del total de las ventas y obtengo el total del 80% y del 20%
Los clientes cuyas ventas representen el 80% del total del ingreso son "a" y
los que representan el 20% son "B"
Yo con un cursor ordeno descendentemente por el campo de totalventas, y así
recorro cliente por cliente y voy sumando desde el que mas vende hasta el que
menos y voy poniendoles "A" hasdta completar el 80%, luego la comparación del
ultimo 20 % s eles pone "b"
y mi cursor queda así:




Se puede hacer. Pero como a mi me gusta saber 'qué hacer'
antes de 'cómo hacerlo' :-) ... tengo una pregunta:

Si sumando.. sumando... se acaba el 80% del total y los clientes
siguientes tienen un total de ventas igual a los anteriores, con qué
criteria se determina cuales son tipo 'A' y cuales son tipo 'B'?
Un caso extremo: tenemos 10 registros todos con un total
de ventas de 10 euros. Cuales son del tip o 'A' y cuales son
del tipo 'B'?

Saludos,
Carlos

Preguntas similares