Calcular saldo sobre una misma tabla

05/09/2005 - 14:59 por Pablodegerli | Informe spam
Hola gente
Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
importantes de Ingreso y Egreso.
Lo que debo es ir calculando en el campo Saldo la diferencia entre los
Ingresos - Egresos hasta la fecha del registro.

Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int, NºLinea
smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint, Egreso
smallint, Saldo smallint)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)

Fecha_Hora NºComprobante NºLinea
Lote Pcb Pedido Ingreso Egreso Saldo
2005-02-05 01:15:00 4 1
21 6 334 167 0 0
2005-03-05 15:07:00 5 1
29 6 167 167 0 0
2005-01-07 12:25:00 6 1
12 6 200 50 0 0
2005-01-07 21:06:00 25 1
1 6 200 0 140 0

Trate de realizarlo de la siguiente manera

Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2 where
T2.Fecha <= Fecha )

Pero evidentemente me actualiza todos porque no le estoy poniendo el filtro
para el update pero no puedo hacerlo con T2 porque es una subconsulta.


Como siempre, Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Sandro
05/09/2005 - 15:37 | Informe spam
y porque no lo haces por cada fila cuando INSERTAS los datos ?, o no estoy
entendiendo bien ?



"Pablodegerli" escribió en el mensaje
news:%
Hola gente
Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
importantes de Ingreso y Egreso.
Lo que debo es ir calculando en el campo Saldo la diferencia entre los
Ingresos - Egresos hasta la fecha del registro.

Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int, NºLinea
smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint,
Egreso
smallint, Saldo smallint)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)

Fecha_Hora NºComprobante
NºLinea
Lote Pcb Pedido Ingreso Egreso Saldo
2005-02-05 01:15:00 4 1
21 6 334 167 0 0
2005-03-05 15:07:00 5 1
29 6 167 167 0 0
2005-01-07 12:25:00 6 1
12 6 200 50 0 0
2005-01-07 21:06:00 25 1
1 6 200 0 140 0

Trate de realizarlo de la siguiente manera

Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2
where
T2.Fecha <= Fecha )

Pero evidentemente me actualiza todos porque no le estoy poniendo el
filtro
para el update pero no puedo hacerlo con T2 porque es una subconsulta.


Como siempre, Gracias de antemano


Respuesta Responder a este mensaje
#2 Pablodegerli
05/09/2005 - 16:02 | Informe spam
Hola Sandro porque el insert viene de esta manera, en realidad uso una
variable table, pero para el ejemplo la pase como tabla.

Insert into @Table
Select Ne.Fecha_Recepcion, Ne.Id_Nota_Entrada, Ie.Nro_Linea,
Lo.Id_Lote, Ine.Pcb, Ine.Bultos_Entrantes, Ine.Bultos_Recibidos, 0, 0
from Nota_Entrada Ne
inner join Item_Nota_Entrada Ine on Ine.Id_Nota_Entrada Ne.Id_Nota_Entrada
inner join Item_Entrada Ie on Ie.Id_Item_Entrada = Ine.Id_Item_Entrada
inner join Lote Lo on Lo.Id_Item_Nota_Entrada = Ine.Id_Item_Nota_Entrada
and Lo.Id_Nota_Entrada = Ne.Id_Nota_Entrada
and Lo.Id_Producto = Ie.Id_Producto
where Ie.Id_Producto = @Id_Producto

Insert into @Table
Select Re.Fecha, Re.Id_Remito_Salida, It.Nro_Linea, '', It.Pcb, It.Cantidad
* It.Pcb, 0,
It.Cantidad_Entregada * It.Pcb, 0
from Remito_Salida Re
inner join Item_Remito_Salida Ire on Ire.Id_Remito_Salida Re.Id_Remito_Salida
inner join Item_Salida It on It.Id_Item_Salida = Ire.Id_Item_Salida
where It.Id_Producto = @Id_Producto

Y luego @Table me queda por fecha, luego probablemente agregue mas datos
desde otras consultas.


"Sandro" escribió en el mensaje
news:
y porque no lo haces por cada fila cuando INSERTAS los datos ?, o no estoy
entendiendo bien ?



"Pablodegerli" escribió en el mensaje
news:%
> Hola gente
> Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
> importantes de Ingreso y Egreso.
> Lo que debo es ir calculando en el campo Saldo la diferencia entre los
> Ingresos - Egresos hasta la fecha del registro.
>
> Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int, NºLinea
> smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint,
> Egreso
> smallint, Saldo smallint)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
>
> Fecha_Hora NºComprobante
> NºLinea
> Lote Pcb Pedido Ingreso Egreso Saldo

> 2005-02-05 01:15:00 4 1
> 21 6 334 167 0 0
> 2005-03-05 15:07:00 5 1
> 29 6 167 167 0 0
> 2005-01-07 12:25:00 6 1
> 12 6 200 50 0 0
> 2005-01-07 21:06:00 25 1
> 1 6 200 0 140 0
>
> Trate de realizarlo de la siguiente manera
>
> Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2
> where
> T2.Fecha <= Fecha )
>
> Pero evidentemente me actualiza todos porque no le estoy poniendo el
> filtro
> para el update pero no puedo hacerlo con T2 porque es una subconsulta.
>
>
> Como siempre, Gracias de antemano
>
>


Respuesta Responder a este mensaje
#3 Pablodegerli
05/09/2005 - 16:15 | Informe spam
Fe de Errartas
Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2 where
T2.Fecha_Hora <= Fecha_Hora )
Porque lo habia cambiado

"Pablodegerli" escribió en el mensaje
news:%
Hola gente
Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
importantes de Ingreso y Egreso.
Lo que debo es ir calculando en el campo Saldo la diferencia entre los
Ingresos - Egresos hasta la fecha del registro.

Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int, NºLinea
smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint,


Egreso
smallint, Saldo smallint)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
Ingreso, Egreso, Saldo)
values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)

Fecha_Hora NºComprobante


NºLinea
Lote Pcb Pedido Ingreso Egreso Saldo
2005-02-05 01:15:00 4 1
21 6 334 167 0 0
2005-03-05 15:07:00 5 1
29 6 167 167 0 0
2005-01-07 12:25:00 6 1
12 6 200 50 0 0
2005-01-07 21:06:00 25 1
1 6 200 0 140 0

Trate de realizarlo de la siguiente manera

Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2


where
T2.Fecha <= Fecha )

Pero evidentemente me actualiza todos porque no le estoy poniendo el


filtro
para el update pero no puedo hacerlo con T2 porque es una subconsulta.


Como siempre, Gracias de antemano


Respuesta Responder a este mensaje
#4 Sandro
05/09/2005 - 16:52 | Informe spam
tu objetivo es mostrar datos o insertar datos, no termino de entender porque
insertas datos para tan solo mostrarlos si es que es asi!!!!

quiezas estees enfocando mal la solucion a tu problema
"Pablodegerli" escribió en el mensaje
news:
Hola Sandro porque el insert viene de esta manera, en realidad uso una
variable table, pero para el ejemplo la pase como tabla.

Insert into @Table
Select Ne.Fecha_Recepcion, Ne.Id_Nota_Entrada, Ie.Nro_Linea,
Lo.Id_Lote, Ine.Pcb, Ine.Bultos_Entrantes, Ine.Bultos_Recibidos, 0, 0
from Nota_Entrada Ne
inner join Item_Nota_Entrada Ine on Ine.Id_Nota_Entrada > Ne.Id_Nota_Entrada
inner join Item_Entrada Ie on Ie.Id_Item_Entrada = Ine.Id_Item_Entrada
inner join Lote Lo on Lo.Id_Item_Nota_Entrada = Ine.Id_Item_Nota_Entrada
and Lo.Id_Nota_Entrada = Ne.Id_Nota_Entrada
and Lo.Id_Producto = Ie.Id_Producto
where Ie.Id_Producto = @Id_Producto

Insert into @Table
Select Re.Fecha, Re.Id_Remito_Salida, It.Nro_Linea, '', It.Pcb,
It.Cantidad
* It.Pcb, 0,
It.Cantidad_Entregada * It.Pcb, 0
from Remito_Salida Re
inner join Item_Remito_Salida Ire on Ire.Id_Remito_Salida > Re.Id_Remito_Salida
inner join Item_Salida It on It.Id_Item_Salida = Ire.Id_Item_Salida
where It.Id_Producto = @Id_Producto

Y luego @Table me queda por fecha, luego probablemente agregue mas datos
desde otras consultas.


"Sandro" escribió en el mensaje
news:
y porque no lo haces por cada fila cuando INSERTAS los datos ?, o no
estoy
entendiendo bien ?



"Pablodegerli" escribió en el mensaje
news:%
> Hola gente
> Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
> importantes de Ingreso y Egreso.
> Lo que debo es ir calculando en el campo Saldo la diferencia entre los
> Ingresos - Egresos hasta la fecha del registro.
>
> Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int, NºLinea
> smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint,
> Egreso
> smallint, Saldo smallint)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
> Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb, Pedido,
> Ingreso, Egreso, Saldo)
> values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
>
> Fecha_Hora NºComprobante
> NºLinea
> Lote Pcb Pedido Ingreso Egreso Saldo

> 2005-02-05 01:15:00 4 1
> 21 6 334 167 0 0
> 2005-03-05 15:07:00 5 1
> 29 6 167 167 0 0
> 2005-01-07 12:25:00 6 1
> 12 6 200 50 0 0
> 2005-01-07 21:06:00 25 1
> 1 6 200 0 140 0
>
> Trate de realizarlo de la siguiente manera
>
> Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2
> where
> T2.Fecha <= Fecha )
>
> Pero evidentemente me actualiza todos porque no le estoy poniendo el
> filtro
> para el update pero no puedo hacerlo con T2 porque es una subconsulta.
>
>
> Como siempre, Gracias de antemano
>
>






Respuesta Responder a este mensaje
#5 Pablodegerli
05/09/2005 - 17:20 | Informe spam
El objetivo es mostrar los datos, es como si fuera un balance donde se
muestran todos los comprobantes que entran en juego y se va mostrando el
saldo.
Por eso en la tabla temporal voy cargando los diferentes comprobantes y al
final se muetra toda la tabla.
Primero cargo los comprobantes y luego quiero calcular el saldo
Ingreso Egreso Saldo
167 0 167
167 0 334
50 0 384
0 140 244


"Sandro" escribió en el mensaje
news:eVc%
tu objetivo es mostrar datos o insertar datos, no termino de entender


porque
insertas datos para tan solo mostrarlos si es que es asi!!!!

quiezas estees enfocando mal la solucion a tu problema
"Pablodegerli" escribió en el mensaje
news:
> Hola Sandro porque el insert viene de esta manera, en realidad uso una
> variable table, pero para el ejemplo la pase como tabla.
>
> Insert into @Table
> Select Ne.Fecha_Recepcion, Ne.Id_Nota_Entrada, Ie.Nro_Linea,
> Lo.Id_Lote, Ine.Pcb, Ine.Bultos_Entrantes, Ine.Bultos_Recibidos, 0, 0
> from Nota_Entrada Ne
> inner join Item_Nota_Entrada Ine on Ine.Id_Nota_Entrada > > Ne.Id_Nota_Entrada
> inner join Item_Entrada Ie on Ie.Id_Item_Entrada = Ine.Id_Item_Entrada
> inner join Lote Lo on Lo.Id_Item_Nota_Entrada Ine.Id_Item_Nota_Entrada
> and Lo.Id_Nota_Entrada = Ne.Id_Nota_Entrada
> and Lo.Id_Producto = Ie.Id_Producto
> where Ie.Id_Producto = @Id_Producto
>
> Insert into @Table
> Select Re.Fecha, Re.Id_Remito_Salida, It.Nro_Linea, '', It.Pcb,
> It.Cantidad
> * It.Pcb, 0,
> It.Cantidad_Entregada * It.Pcb, 0
> from Remito_Salida Re
> inner join Item_Remito_Salida Ire on Ire.Id_Remito_Salida > > Re.Id_Remito_Salida
> inner join Item_Salida It on It.Id_Item_Salida = Ire.Id_Item_Salida
> where It.Id_Producto = @Id_Producto
>
> Y luego @Table me queda por fecha, luego probablemente agregue mas datos
> desde otras consultas.
>
>
> "Sandro" escribió en el mensaje
> news:
>> y porque no lo haces por cada fila cuando INSERTAS los datos ?, o no
>> estoy
>> entendiendo bien ?
>>
>>
>>
>> "Pablodegerli" escribió en el mensaje
>> news:%
>> > Hola gente
>> > Tengo esta tabla que la cargo desde un proceso con los 2 campos mas
>> > importantes de Ingreso y Egreso.
>> > Lo que debo es ir calculando en el campo Saldo la diferencia entre


los
>> > Ingresos - Egresos hasta la fecha del registro.
>> >
>> > Create Table Tmp(Fecha_Hora smalldatetime, NºComprobante int,


NºLinea
>> > smallint, Lote int, Pcb smallint, Pedido smallint, Ingreso smallint,
>> > Egreso
>> > smallint, Saldo smallint)
>> > Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb,


Pedido,
>> > Ingreso, Egreso, Saldo)
>> > values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
>> > Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb,


Pedido,
>> > Ingreso, Egreso, Saldo)
>> > values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
>> > Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb,


Pedido,
>> > Ingreso, Egreso, Saldo)
>> > values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
>> > Insert into Tmp(Fecha_Hora, NºComprobante, NºLinea, Lote, Pcb,


Pedido,
>> > Ingreso, Egreso, Saldo)
>> > values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
>> >
>> > Fecha_Hora NºComprobante
>> > NºLinea
>> > Lote Pcb Pedido Ingreso Egreso Saldo
>>



-
>> > 2005-02-05 01:15:00 4


1
>> > 21 6 334 167 0 0
>> > 2005-03-05 15:07:00 5


1
>> > 29 6 167 167 0 0
>> > 2005-01-07 12:25:00 6


1
>> > 12 6 200 50 0 0
>> > 2005-01-07 21:06:00 25


1
>> > 1 6 200 0 140 0
>> >
>> > Trate de realizarlo de la siguiente manera
>> >
>> > Update Tmp set Saldo = (Select sum(Ingreso) - sum(Egreso) from Tmp T2
>> > where
>> > T2.Fecha <= Fecha )
>> >
>> > Pero evidentemente me actualiza todos porque no le estoy poniendo el
>> > filtro
>> > para el update pero no puedo hacerlo con T2 porque es una


subconsulta.
>> >
>> >
>> > Como siempre, Gracias de antemano
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida