Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Campos Calculados en base un registro anterior al actual

Campos Calculados en base un registro anterior al actual

Estoy haciendo la típica tabla contable
DEBE | HABER | SALDO

Siendo SALDO, un campo calculado en base al DEBE y el HABER. Pero no se como hacer para calcularlo y mostrarlo como se debe, como en la vieja escuela. Porque? Porque si bien el saldo se obtiene directamente desde la operación con DEBE y HABER, necesito que, partiendo del primer registro de la tabla, los siguientes SALDOS, se calculen en base al arrastre de cuentas, es decir, supongamos que tengo:

ID | DEBE | HABER | SALDO
---------------------------
1..........2..........0.......-2
2..........5..........0.......-7
3..........8..........0.......-15
4..........0..........5.......-10

etc.

Puedo hacer el DEBE-HABER cuando calculo el campo, pero como hago para que me arrastre el SALDO anterior? no se me ocurre.

Saludos y gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 07-03-2008 a las 19:53:58.
Responder Con Cita
  #2  
Antiguo 07-03-2008
Rudi Rudi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 78
Poder: 21
Rudi Va por buen camino
seria algo como la suma de los DEBE menos la suma de los HABER.
siempre que el sean ID's menores o iguales a mi ID.
Responder Con Cita
  #3  
Antiguo 07-03-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
bueno, se me ocurre una subconsulta, algo asi como:

Código SQL [-]

Select id, debe, haber, (debe - haber) as saldo, 
  (
     Select sum(debe-haber) from tabla t where t.id <= tabla.id
  ) as acumulado
from tabla


a lo mejor algo me falla pero creo que ahi esta la idea...
Responder Con Cita
  #4  
Antiguo 08-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Si, la idea podria ser, pero el tema esta que la consulta, si o si, tiene que estar ordenada por FECHA.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #5  
Antiguo 08-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por luisgutierrezb Ver Mensaje
bueno, se me ocurre una subconsulta, algo asi como:


Código SQL [-]

Select id, debe, haber, (debe - haber) as saldo,
(
Select sum(debe-haber) from tabla t where t.id <= tabla.id
) as acumulado
from tabla







a lo mejor algo me falla pero creo que ahi esta la idea...
Lo que no entiendo es como aplicar esta subconsulta, es decir, en donde?
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 08-03-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Sobre el ordenamiento, podrías ordenarla tal como te plazca:

Código SQL [-]
select id, debe, haber, (debe - haber) as saldo, 
  (
     select sum(debe-haber) from tabla t where t.id <= tabla.id
  ) as acumulado
from tabla
order by fecha;

El inconveniente que veo de enfrentar el problema con esta solución es el rendimiento. En bases de datos pequeñas, no habrá diferencia, pero en bases de datos grandes indudablemente no lo dejaría. Lamentablemente no sabemos el motor sobre el que se ejecutará, por lo que, ceñidos al estándar, no veo otra opción que esta.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 09-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
SOLUCIONADO

Corregí la clausula where, ya que es lo correcto. Porque? que pasa si añadiera un registro cuya fecha es anterior? al estar ordenado por ID, este seria mayor en un registro posterior.

Código Delphi [-]
select id_caja, fecha, concepto, cantidad, debe, haber, (debe - haber) as saldo, 
  (
     select sum(debe-haber) from caja t where t.fecha<= caja.fecha
  ) as acumulado
from caja
order by fecha

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 10-03-2008 a las 00:07:16.
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
Campos Calculados Kaller Tablas planas 1 12-12-2006 00:11:13
Al insertar un registro me salta a otro anterior judoboy Firebird e Interbase 2 31-01-2006 16:44:19
CAmpos calculados? cmena Conexión con bases de datos 4 17-06-2004 11:54:51
No me inserta un registro nuevo, me modifica el anterior vhirginia Conexión con bases de datos 10 11-05-2004 13:04:38
Campos Calculados UTECYBER OOP 2 17-11-2003 14:00:27


La franja horaria es GMT +2. Ahora son las 12:02:40.


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