Tengan cordiales saludos.
Necesito realizar lo siguiente pero sin utilizar cursores, se que se puede.
Si es necesario se puede utilizar tablas derivadas o temporales, UPDATE,
etc.
1. Se necesita actualizar los saldos de movimientos historicos de un
conjunto de registros, estos estan ordenados de mayor a menor segun la
fecha, se tiene el saldo actual en el primer registro y se debe actualizar
los registros anteriores.
PK Codigo TipoMov Fecha Ingreso Retiro
Saldo
1 0001 S 31/01/2005 0
10 10
2 0001 S 20/01/2005 0
20 0
3 0001 S 10/01/2005 0
20 0
4 0001 I 10/01/2005 60
0 0
5 0001 S 10/01/2005 0
20 0
El resultado debe ser así despues de actualizar los saldos.
PK Codigo TipoMov Fecha Ingreso Retiro
Saldo
1 0001 S 31/01/2005 0
10 10
2 0001 S 20/01/2005 0
20 20
3 0001 S 10/01/2005 0
20 40
4 0001 I 10/01/2005 60 0
60
5 0001 S 10/01/2005 0
20 0
Como se daran cuenta solo es cuestion de ir sumando al saldo los retiros y
restando los ingresos. No se quiere empezar de forma ordenada por la fecha
de menor a mayor, ya que eso significaria que se necesita saber el saldo
inicial pero la idea es a través del saldo final ir retrocediendo.
Esto debe ser hecho sin utilizar cursores y solo con UPDATE, debe tomarse en
cuenta que no solo estan estos registros, hay otros de otro Codigo.
Utilizando variables temporales con Update he consegido realizar la
actualización de los saldos pero cuando esta ordenado la fecha de menor a
mayor de la siguiente manera.
DECLARE @Saldo numeric(12)
DECLARE @IDt char(10)
SET @Saldo = 0
SET @IDt = ''
UPDATE Mov
SET
@Saldo = CASE WHEN IDt <> @IDt THEN Saldo ELSE Saldo + @Saldo END,
cpnSaldo = @Saldo,
@IDt = IDt
FROM #Movimiento Mov
Ahora deberia haber una manera de hacerlo al contrario.
2. Recuperar unicos registros de varios registros. Supongan se tiene los
siguientes registros.
PK Codigo CodSucursal
1 0001 0002
2 0001 0001
3 0001 0001
4 0002 0001
5 0002 0002
6 0003 0005
El resultado que se quiere obtener es el siguiente:
Codigo CodSucursal
0001 0002
0002 0001
0003 0005
Agradeciendoles por su ayuda.
Pedro Valle
Leer las respuestas