Se puede hacer con un sql o tengo que usar un recordset ?

01/05/2010 - 00:21 por Juan Carlos | Informe spam
Tengo este problema,
Mes Cuota Pago
1 20
2 25
3 40

Supongamos que ingreso 50 como Pago
Se puede hacer mediante una instruccion sql que me deje el siguiente
resultado ?
Mes Cuota Pago
1 20 20
2 25 25
3 40 5

O tengo que usar un recordset e ir prorateando el valor a medida que me
muevo por cada registro.
Gracias por cualquier sugerencia.

Preguntas similare

Leer las respuestas

#11 Juan Carlos
02/05/2010 - 21:37 | Informe spam
Raipon casi casi !!!
Por cierto las cervezas te las debo funciono o no por la voluntad ante todo!

Pero el ejemplo funcion bien, pero ... mira lo que pasa cuando se da
esta condicion.
Id mes cuota pago
1 1 20 20
2 2 25 5
3 3 40 0
5 4 50 0
Lo ejecuto con un valor de 60 y me lo deja asi.
Id mes cuota pago
1 1 20 20
2 2 25 25
3 3 40 40
5 4 50 50

Cuando la ultima el mes 4 deberia quedar con 5.
Pero bueno, me parece que no me evito el bucle para ir viendo mes x mes,
no se que opinas ?


El 02-05-2010 01:55 p.m., raipon escribió:
Hola, para tener en cuenta todas las variables posibles, hay que estar
dispuesto a escribir un poco más :

Update Ejemplo
Set Pago > IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo', 'Mes<='& Mes),0)
<= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<'& Mes),0))< 0, 0, IIf(Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)', 'Ejemplo', 'Mes<='& Mes),0)<= Ingreso, Cuota, Ingreso -
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<'& Mes),0)));

Por cierto, si te funciona, me debes dos cervezas.

Adios, un saludo.


Respuesta Responder a este mensaje
#12 raipon
03/05/2010 - 07:44 | Informe spam
Hola. A mi me devuelve los resultados correctos con los datos que
proporcionas :

Mes Cuota Pago
1 20,00 ? 20,00 ?
2 25,00 ? 25,00 ?
3 40,00 ? 40,00 ?
4 50,00 ? 0,00 ?


... es decir, el cuarto mes 0 ?. Vuelvo a pegar la expresión no sea que haya
un error de transcripción :

IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo', 'Mes <=' & Mes),0)
<= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)) < 0, 0, IIf(Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)', 'Ejemplo', 'Mes <=' & Mes),0) <= Ingreso, Cuota, Ingreso -
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)))

Adios, un saludo.
Respuesta Responder a este mensaje
#13 Juan Carlos
04/05/2010 - 02:25 | Informe spam
Yo te creo pero no logro entender porque me falla.

Partiendo de
mes cuota pago
1 20 0
2 25 0
3 40 0
4 50 0
Pongo 25 y me queda asi el 4 mal.

mes cuota pago
1 20 20
2 25 5
3 40 0
4 50 50
Vuelvo a cero todo
mes cuota pago
1 20 0
2 25 0
3 40 0
4 50 0

Pongo 60 y me queda asi el 4 mal.
mes cuota pago
1 20 20
2 25 25
3 40 15
4 50 50
Sera mi access ? uso 2003
Si quieres verlo con mi base superchiquita 184 kb en segundos baja te
dejo el link.
www.caplap.com.ar/raipon.mdb
gracias de todas formas !



El 03-05-2010 02:44 a.m., raipon escribió:
Hola. A mi me devuelve los resultados correctos con los datos que
proporcionas :

Mes Cuota Pago
1 20,00 ? 20,00 ?
2 25,00 ? 25,00 ?
3 40,00 ? 40,00 ?
4 50,00 ? 0,00 ?


... es decir, el cuarto mes 0 ?. Vuelvo a pegar la expresión no sea que haya
un error de transcripción :

IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo', 'Mes<='& Mes),0)
<= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<'& Mes),0))< 0, 0, IIf(Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)', 'Ejemplo', 'Mes<='& Mes),0)<= Ingreso, Cuota, Ingreso -
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<'& Mes),0)))

Adios, un saludo.


Respuesta Responder a este mensaje
#14 Raipon
04/05/2010 - 13:40 | Informe spam
¡ Solucionado !

... pero de verdad que el comportamiento es muy curioso, y un tanto
inquietante.

En primer lugar, yo utilizo siempre parámetros declarados
explicitamente,
con lo cual, me aseguro que el tipo de datos es el correcto. Habia
omitido
(en el mensaje) la clausula parameters para hacer más entendible la
instrucción sql, pero esto provocaba que tratara el valor de Ingreso
como
texto, y no como moneda.
Pero esto no solucionaba del todo el problema, y los resultados de la
consulta, evidenciaban que no se procesaban los registros en el orden
correcto, era evidente que un mismo registro era actualizado más de
una vez.
Así que he modificado la consulta para asegurarme que el orden de
procesamiento es correcto.

Lo curioso del caso es que en mi base de datos este problema no he
sido
capaz de reproducirlo, todo y que he comprobado que la configuración
en
Opciones es idéntica, el formato de la base de datos es igual (Access
2000)
y la versión de Access : 2003 también coincide.

La solución es esta :

Parameters Ingreso Currency;
Update (Select Top 100 Percent * From Ejemplo Order By Mes)
Set Pago = IIf(IIf(Nz(DSum('Nz(Cuota,0) - Nz(Pago, 0)', 'Ejemplo',
'Mes <='
& Mes),0) <= Ingreso, Cuota, Ingreso - Nz(DSum('Nz(Cuota,0) -
Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)) < 0, 0, IIf(Nz(DSum('Nz(Cuota,
0) -
Nz(Pago,0)', 'Ejemplo', 'Mes <=' & Mes),0) <= Ingreso, Cuota, Ingreso
-
Nz(DSum('Nz(Cuota,0) - Nz(Pago,0)','Ejemplo','Mes<' & Mes),0)));

Adios, un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida