![]() |
SQL sumar iniciando con valor del renglon anterior
Que tal a todos, tengo tiempo tratando de hacer un reporte de historico de saldos de clientes, o sea es algo como esto:
CLIENTE FECHA MOVIMIENTO CARGO ABONO SALDO 1 01/01/09 NOTA 1500 0 1500<--Saldo renglon anterior+cargo-abono 1 03/01/08 PAGO NOTA 0 500 1000<--Saldo renglon anterior+cargo-abono 1 09/01/08 PAGO NOTA 0 900 100<--Saldo renglon anterior+cargo-abono ya tengo el reporte con las primeras 5 columnas pero no se como hacer para la columna de saldo ya que este valor entra como campo inicial del renglon siguiente, alguien tiene alguna solucion, de antemando agradezco su atencion. |
Cita:
Podrías usar un cursor que en una tabla temporal te genere los saldos progresivos en una tabla temporal. Tu consulta la unes con la temporal amarrando por la fecha. Se me ocurre a botepronto que esa sería una solución. saludos. |
suena bien tu propuesta yo creo que pueda funcionar pero el cursor como se utiliza?, y seria por fecha y tipo de movimiento(Nota, Pago,Etc) por que si es solo por fecha, existen dias en que se registran varios movimientos.
|
Ok, Primero lo que debes hacer es obtener los sumarios por Dia.
Luego ese sumario lo recorres con el cursor grabando los acumulados en una tabla temporal teniendo entonces la columna Fecha, Sumario, Acumulado X X X Y Y X + Y Z Z X + Y + Z Luego a tu consulta la unes con esta tabla temporal y obtienes lo que necesitas. Saludos |
podria ser un subselect con la fecha anterior algo asi como:
es un ejemplo simple, pero a lo mejor sirve como guia... |
Cita:
Es de hecho totalmente correcta esa solución, la única desventaja es que esa es una consulta sumamente costosa. |
gracias a ambos por su respuesta, estoy tratando de implementar la tuya poliburro, pero podrias explicarme un poco mas como se usan los cursores que nunca he utilizado alguno, cabe mencionar que estoy usando bases de datos en access y acceso por medio de ODBC´s
|
Que tal luisgutierrezb, ya probe tu propuesta y si funciona, pero no es viable ya que en los primeros renglones todo bien, el problema empieza cuando recorro la consulta a los registros superirores funciona de la misma forma que con campos calculados, hace el calculo conforme va desplegando los valores y el numero de subconsultas que tiene que realizar aumenta exponencialmente y no termina, ya habia probado la posibilidad de hacerlo por medio de campos calculados pero como te digo tampoco es viable, lo que me queda es hacerlo por medio de cursores, como dice poliburro, el detalle es que nunca los he utilizado, si alguien sabe y me puede guiar se los agradecere. Si algo encuentro los mantendre al tanto.
|
¿ qué motor de BBDD utilizas ?
Con interbase, firebird, sqlserver, ... se puede hacer un procedimiento almacenado que te permite realizar lo que tú propones sin que se dispare el rendimiento. Saluds |
que tal fjcg02, estoy manejando para esta aplicacion una BD en access es de lo mas pobre, generalmente manejo postgresql pero para esta aplicacion decidi usar access 97 por la misma naturaleza de la aplicacion.
|
Cita:
El problema amigo es que los cursores no están disponibles en Access97. Otra posible solución es que agreges un campo calculado a tu AdoQuery y allí vayas generando el acumulado. Saludos. |
La franja horaria es GMT +2. Ahora son las 13:22:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi