Sumar dos columnas en una tercera (saldo) mysql

Tengo una tabla llamada detalle que consta de los siguientes campos
Fecha, Concepto, Comprobante, Depósitos, Cheques y saldos
y los siguientes datos:
2009-02-01 Nuestro deposito Inicial 000 1,500,000 0,000,000 1,500,000
2009-02-02 Nuestro Pago Servicios 015 0 15,000 1,485,000
2009-02-03 Nuestro Pago Hotel          016                    0       15,000     1,470,000
La Pregunta es la siguiente:
¿Cómo hago para que me dé el saldo en la columna saldos?
Probé con esto:
Query27.Sql.Add('Update Detalle Set Saldo = Saldo + (Select Sum(Deposito - Cheque)) Where Banco = '+FloatToStr(BancoCodigo.AsFloat)+' Order By Fecha'); 
y me suma deposito+banco pero linea a linea o sea como el ejemplo anterior
la primera linea me da de saldo 1,500,000 , la segunda linea 15,000 y la tercera linea
tambien 15,000, no me sale acumulativo.

1 respuesta

Respuesta
2
Veo una pequeña incongruencia. Me indicas que la tabla tiene una estructura cuyos campos corresponden a Fecha, Concepto, Comprobante, Depósitos, Cheques y Saldos. Ahora bien, en la consulta de actualización (UPDATE) realizas el cambio usando como filtro el campo Banco, que no está en la estructura que me indicaste (con lo que a priori ni siquiera debería funcionarte).
Confírmame la estructura, y el tipo de cálculo.
En cuanto me lo envíes, continuamos.
Gracias y disculpame el pequeño olvido, si, filtro los datos de acuerdo al banco que uno va pidiendo por el cual la estructura es esta:
Banco, Fecha, Concepto, Comprobante, Depósitos, Cheques y saldos
El problema que tengo es que quiero que en la columna de saldo se vaya acumulando
los saldos de acuerdo a las operaciones que se realizan, a saber
Se Realiza la primera operación cual es la del deposito inicial de 1,500,000 en la columna de Deposito y debería de salirme en el saldo también los 1,500,000.
La segunda operación es de una extracción en cheques por lo cual asigno a la columna de cheques 15,000 y en la columna de saldo debería de salirme 1,485,000
La tercera operación es también de una extracción en cheques por lo cual también asigno a la columna de cheques 15,000 y en columna de saldo debería de salir el monto de 1,470,000.
Para aclarar un poco más pongo de ejemplo como lo hacia en paradox para asignar los datos a la columna de saldo
VSaldo := Vsaldo + (Deposito - Cheques);
Desde ya muchísimas gracias
Ok, ahora si me hago una mejor idea.
No es necesario llevar la columna saldos en ese tipo de detalle, puesto que teniendo almacenados los movimientos (como los tienes) obtener el saldo de un banco a una determinada fecha es tan obvio como...
SELECT SUM(depositos) - SUM(cheques)
FROM  detalle
WHERE banco = 'tu_banco'
AND  fecha <= 'tu_fecha'
... siendo tu_banco, el banco del cual quieres obtener el saldo, y fecha el día sobre el cual quieres obtener el saldo.
Si tu necesidad es consultar el saldo a una determinada fecha, esta es tu solución más optima. Ahora bien, si necesitas llevarlo en la tabla (aunque insisto, no es necesario) debes añadir una clave primaria a la tabla, es decir, un numero de movimiento, un id o algo.
Comentame si te es estrictamente necesario tener el campo saldos o si la solución propuesta te satisface.
Muchísimas gracias por la respuesta; ahora la forma que yo edito la base de datos es a través del DBGrid, que me actualiza los datos y el usuario ve los datos mientras va cargando por eso me es necesario el saldo y para esto le puse un botón de "SALDAR", que el usuario una vez cargada todas las operaciones de registrar los cheques y deposito, actualiza los datos y a la vez visualiza los saldos que tiene.
La forma propuesta que me has dado:
 SELECT SUM(depositos) - SUM(cheques)
FROM detalle
WHERE banco = 'tu_banco'
AND fecha <= 'tu_fecha',  
Lo estoy utilizando para dar los informes mensuales de saldos de cada banco pero cuando el usuario va cargando los datos es lo que estoy tratando de solucionar
Desde ya muchísimas gracias
Pues tal y como te indiqué, necesitas un identificador de movimiento, un id, una referencia.
Así, antes de mostrar el DBGrid deberás hacer un SELECT de los movimientos por Banco y ordenado por fecha, y dentro de un bucle (while o for) actualizar uno a uno teniendo en cuenta la suma de depósitos menos la suma de cheques.
Seria algo parecido a:
SELECT numero_movimiento,
            Deposito,
            Cheque
FROM detalle
WHERE banco = 'tu_banco'
ORDER BY fecha ASC (del más antiguo al actual)
Luego, recorriendo la consulta en un bucle, en cada iteracion deberas hacer
variable_saldo = 0;
while (queden registros) {
   variable_numero_movimiento = numero_de_movimiento de la fila en curso
   variable_deposito = valor_del_deposito de la fila en curso
   variable_cheque   = valor_del_cheque de la fila en curso
   variable_saldo += variable_deposito - variable_cheque
   UPDATE detalle
   SET saldo = variable_saldo
   WHERE numero_moviemiento = variable_numero_movimiento
}
En fin, te lo he puesto un poco algorítmico, con lo que no creo que tengas problemas en trasladarlo a cualquier lenguaje.
Espero haberte ayudado.
Saludos.
No se me ocurre otra forma.
Espero
Que buena respuesta, con esto he solucionado el problema que estaba teniendo, desde ya un enorme agradecimiento por la ayuda que me has brindado y por el tiempo que te has tomado. Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas