Problemas con una select

03/01/2007 - 23:45 por jose | Informe spam
Hola a todos

Soy un poco novato con esto de las Select, y tengo una duda. La duda es la
siguiente.

Tengo una tabla, en la cual almaceno los datos sobre los movimientos de una
cuenta bancaria con los siguientes campos.

Id_Movimiento
Id_Cuenta
Fecha
Tipo -- campo que indetifica si es un ingreso o un pago
Cantidad
concepto

Quisiera saber como puedo sacar una select con todos los campos y ademas el
saldo por cada movimineto?

La select tendría que mostrar los siguientes campos
Select Id_Movimiento,
Id_Cuenta,
Fecha,
Tipo,
concepto,
cantidad,
saldo -- este es el que tengo dudas de como se obtendría el
saldo en cada movimiento
from Movimientos .

Muchas gracias

Jose Mª Cousiño
 

Leer las respuestas

#1 Alejandro Mesa
04/01/2007 - 01:50 | Informe spam
Jose,

El ejemplo que posteo Isaias (Gracias) puede ayudarte con la logica de como
resolver esa sentencia, pero como eres novato te voy a expandir la idea. Lo
primero es que nos digas que criterio usar para dar un orden cronologico a
los movimientos. Supongamos que los valores de columna [fecha] son usados con
este proposito, entonces podemos usar:

select
Id_Movimiento,
Id_Cuenta,
Fecha,
Tipo,
concepto,
cantidad,
(
select sum(case when tipo = 'I' then cantidad else (-1 * cantidad) end)
from dbo.moviminetos as m2
where m2.cuenta = m1.cuenta and m2.fecha <= m1.fecha
)as saldo
from
dbo.movimientos as m1
order by
Id_Cuenta,
Fecha
go

Que pasaria si una cuenta tiene dos movimientos en la misma [fecha]?. Bueno,
la sentencia anterior no dara los resultados esperados puesto que se sumarian
ambas cantidades para un mismo movimiento. En estos casos necesitamos otro
criterio para romper ese amarre, por ejemplo escoger la columna
[Id_Movimiento].

select
Id_Movimiento,
Id_Cuenta,
Fecha,
Tipo,
concepto,
cantidad,
(
select sum(case when tipo = 'I' then cantidad else (-1 * cantidad) end)
from dbo.movimientos as m2
where
m2.cuenta = m1.cuenta
and
(
m2.fecha < m1.fecha
or (m2.fecha = m1.fecha and m2.Id_Movimiento <= m1.Id_Movimiento)
)
)as saldo
from
dbo.movimientos as m1
order by
Id_Cuenta,
Fecha
go


AMB

"jose" wrote:

Hola a todos

Soy un poco novato con esto de las Select, y tengo una duda. La duda es la
siguiente.

Tengo una tabla, en la cual almaceno los datos sobre los movimientos de una
cuenta bancaria con los siguientes campos.

Id_Movimiento
Id_Cuenta
Fecha
Tipo -- campo que indetifica si es un ingreso o un pago
Cantidad
concepto

Quisiera saber como puedo sacar una select con todos los campos y ademas el
saldo por cada movimineto?

La select tendría que mostrar los siguientes campos
Select Id_Movimiento,
Id_Cuenta,
Fecha,
Tipo,
concepto,
cantidad,
saldo -- este es el que tengo dudas de como se obtendría el
saldo en cada movimiento
from Movimientos .

Muchas gracias

Jose Mª Cousiño



Preguntas similares