Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-01-2009
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.

Última edición por agova fecha: 22-01-2009 a las 15:53:21.
Responder Con Cita
  #2  
Antiguo 22-01-2009
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por agova Ver Mensaje
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.

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.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 22-01-2009
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 22-01-2009
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
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
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 22-01-2009
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
podria ser un subselect con la fecha anterior algo asi como:

Código SQL [-]
Select cliente, Movimiento, Fecha, Cargo,
(Select Sum(m.Abono) from movimientos m 
where m.fecha < p.fecha and cliente = x, etc) as Abono
from movimientos p
es un ejemplo simple, pero a lo mejor sirve como guia...
Responder Con Cita
  #6  
Antiguo 22-01-2009
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por luisgutierrezb Ver Mensaje
podria ser un subselect con la fecha anterior algo asi como:


Código SQL [-]
Select cliente, Movimiento, Fecha, Cargo,
(Select Sum(m.Abono) from movimientos m
where m.fecha < p.fecha and cliente = x, etc) as Abono
from movimientos p





es un ejemplo simple, pero a lo mejor sirve como guia...

Es de hecho totalmente correcta esa solución, la única desventaja es que esa es una consulta sumamente costosa.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 23-01-2009
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 23-01-2009
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 24-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
¿ 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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #10  
Antiguo 27-01-2009
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 27-01-2009
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por agova Ver Mensaje

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.

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.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
añadir un renglón a un dbgrid olybola Varios 8 07-06-2010 21:23:15
sumar el valor de un edit a un campo de tabla josi Varios 4 12-01-2009 20:36:45
Renglon seleccionado en DBGRID advancexz Gráficos 1 28-06-2008 00:53:45
¿Como sumar un valor de un edit y reflejar incremento en el mismo? The_Animal Varios 3 31-12-2007 01:12:48
agregar un renglón al dbgrid olybola Conexión con bases de datos 1 26-06-2003 20:58:03


La franja horaria es GMT +2. Ahora son las 21:29:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi