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

#11 Alejandro Mesa
05/09/2005 - 20:13 | Informe spam
Trata:

Create Table Tmp(
Fecha_Hora smalldatetime,
No_Comprobante int,
No_Linea smallint,
Lote int,
Pcb smallint,
Pedido smallint,
Ingreso smallint,
Egreso smallint,
Saldo smallint
)
go

Insert into Tmp values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
Insert into Tmp values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
Insert into Tmp values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
Insert into Tmp values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
go

select
a.fecha_hora,
a.ingreso,
a.egreso,
sum(b.ingreso - b.egreso) as saldo
from
tmp as a
inner join
tmp as b
on b.Fecha_Hora <= a.Fecha_Hora
group by
a.fecha_hora,
a.ingreso,
a.egreso
order by
1 asc
go

drop table tmp
go

Si este calculo lo quieres hacer por producto, entonces debes agregar una
condicion mas al "inner join", que es:

a.product_id = b.productid


AMB


"Pablodegerli" wrote:

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
#12 Pablodegerli
05/09/2005 - 20:43 | Informe spam
Yo no estoy guardando ningun saldo en ninguna tabla, de hecho una vez
cargada la tabla hago el select y la borro.
Es una tabla para generar datos que seran mostrados en pantalla

"Sandro" escribió en el mensaje
news:
tienes un error de construccion aqui..
esto que estas haciendo solo tienes que registrar en tu tabla los
moviemientos realizados...

Ej.:

Fecha Ingreso Egreso
01/01/2005 10 0
02/01/2005 8 0
05/02/2005 5 0
06/02/2005 0 3
... ...


Cuando necesitas hacer una consulta de saldos total es sencillo es


Ingreso -
Egreso = Saldo
y cuando quieres sabes el saldo en cierto mes, solo haces lo mismo pero


con
la condicion que lo limitas por fecha
Cuadno trabajes con sistemas contables, stock, etc, nunca calcules saldos,
stock y graves en un campo, cuando necesites saber sobre el saldo o stock,
realisas una consulta, que te la calcule, si la base va a manejar gran
cantidad de datos, el resultado lo obtenes desde una Vista indexada, para
mejorar la velocidad de respuesta

"Pablodegerli" escribió en el mensaje
news:%
> No por que no estamos teniendo el cuenta el saldo anterior, mira
> en ese caso traeria
> 167 0 167
> 167 0 167
> 50 0 50
> 0 0 140
> Por eso buscaba el sum(ingreso) - sum(egreso) de todos los registros
> anteriores a la fecha del registro en el que estoy parado
>
> "Sandro" escribió en el mensaje
> news:
>> a ver si se entiende :
>> suponte esto
>>
>> SELECT ingreso, egreso, (ingreso + egreso) AS Saldo FROM Tabla
>> con eso tendrias lo que quieres, mas alla que tenga uniones con otras
> tablas
>> y demas
>> con eso no te es suficiente ?
>>
>>
>> "Pablodegerli" escribió en el mensaje
>> news:
>> > Problema ninguno, uso una variable table y me parece ma legible el
> codigo,
>> > pero en caso de hacerlo en un union sigo con el mismo interrogante.
>> >
>> > "Sandro" escribió en el mensaje
>> > news:%
>> >> y porque no mostrarlo directamente sin tener que grabarlo en una


tabla
>> >> temporal ?
>> >> cual es el problema de hacerlo asi ?
>> >>
>> >> "Pablodegerli" escribió en el mensaje
>> >> news:
>> >> > 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
#13 Pablodegerli
05/09/2005 - 20:52 | Informe spam
Claro el tema es el siguiente Alejandro, para no abrumarlos con todo el
codigo genere un ejemplo con la tabla que calculo en base a los comprobantes
de ingreso y egreso de mercaderia
Lo que hago es esto
set nocount on
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

Para armar el ejemplo use Tmp en vez de @Table
Lo que hago es primero llenar @Table y despues tratar de calcular el saldo
que de momento hago asi

Declare @Fecha smalldatetime
Declare c cursor for select Fecha_Hora from @Table order by Fecha_Hora
open c
fetch next from c into @Fecha
while @@Fetch_Status = 0
begin
update @Table set Saldo (Select sum(Ingreso) - sum(Egreso) from @Table T2 where
T2.Fecha_Hora <= @Fecha )
where Fecha_Hora = @Fecha
fetch next from c into @Fecha
end
close c
deallocate c

Asi que lo que necesitaria es la misma sentencia que haz hecho pero para el
update y ahi es donde fallo

Gracias por entender y por bancarte mi mareo
Saludos

"Alejandro Mesa" escribió en el
mensaje news:
Trata:

Create Table Tmp(
Fecha_Hora smalldatetime,
No_Comprobante int,
No_Linea smallint,
Lote int,
Pcb smallint,
Pedido smallint,
Ingreso smallint,
Egreso smallint,
Saldo smallint
)
go

Insert into Tmp values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
Insert into Tmp values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
Insert into Tmp values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
Insert into Tmp values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
go

select
a.fecha_hora,
a.ingreso,
a.egreso,
sum(b.ingreso - b.egreso) as saldo
from
tmp as a
inner join
tmp as b
on b.Fecha_Hora <= a.Fecha_Hora
group by
a.fecha_hora,
a.ingreso,
a.egreso
order by
1 asc
go

drop table tmp
go

Si este calculo lo quieres hacer por producto, entonces debes agregar una
condicion mas al "inner join", que es:

a.product_id = b.productid


AMB


"Pablodegerli" wrote:

> 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
#14 Alejandro Mesa
05/09/2005 - 21:04 | Informe spam
Trata:

update
@Table
set
Saldo = (Select sum(Ingreso - Egreso) from @Table as 2 where t2.fecha <=
@table.fecha)


AMB

"Pablodegerli" wrote:

Claro el tema es el siguiente Alejandro, para no abrumarlos con todo el
codigo genere un ejemplo con la tabla que calculo en base a los comprobantes
de ingreso y egreso de mercaderia
Lo que hago es esto
set nocount on
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

Para armar el ejemplo use Tmp en vez de @Table
Lo que hago es primero llenar @Table y despues tratar de calcular el saldo
que de momento hago asi

Declare @Fecha smalldatetime
Declare c cursor for select Fecha_Hora from @Table order by Fecha_Hora
open c
fetch next from c into @Fecha
while @@Fetch_Status = 0
begin
update @Table set Saldo > (Select sum(Ingreso) - sum(Egreso) from @Table T2 where
T2.Fecha_Hora <= @Fecha )
where Fecha_Hora = @Fecha
fetch next from c into @Fecha
end
close c
deallocate c

Asi que lo que necesitaria es la misma sentencia que haz hecho pero para el
update y ahi es donde fallo

Gracias por entender y por bancarte mi mareo
Saludos

"Alejandro Mesa" escribió en el
mensaje news:
> Trata:
>
> Create Table Tmp(
> Fecha_Hora smalldatetime,
> No_Comprobante int,
> No_Linea smallint,
> Lote int,
> Pcb smallint,
> Pedido smallint,
> Ingreso smallint,
> Egreso smallint,
> Saldo smallint
> )
> go
>
> Insert into Tmp values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
> Insert into Tmp values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
> Insert into Tmp values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
> Insert into Tmp values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
> go
>
> select
> a.fecha_hora,
> a.ingreso,
> a.egreso,
> sum(b.ingreso - b.egreso) as saldo
> from
> tmp as a
> inner join
> tmp as b
> on b.Fecha_Hora <= a.Fecha_Hora
> group by
> a.fecha_hora,
> a.ingreso,
> a.egreso
> order by
> 1 asc
> go
>
> drop table tmp
> go
>
> Si este calculo lo quieres hacer por producto, entonces debes agregar una
> condicion mas al "inner join", que es:
>
> a.product_id = b.productid
>
>
> AMB
>
>
> "Pablodegerli" wrote:
>
> > 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
#15 Pablodegerli
05/09/2005 - 21:18 | Informe spam
Update @Table set Saldo = (Select sum(Ingreso - Egreso) from @Table as 2
where t2.fecha <= @table.fecha

AHI ESTA!! esta seria la final porque el
No estaba poniendo el <= @table.fecha
sino que ponia solo <= fecha pensando que lo tomaba de la tabla que estaba
actualizando

Muchas Gracias, Troesma!!!!


"Alejandro Mesa" escribió en el
mensaje news:
Trata:

update
@Table
set
Saldo = (Select sum(Ingreso - Egreso) from @Table as 2 where t2.fecha <> @table.fecha)


AMB

"Pablodegerli" wrote:

> Claro el tema es el siguiente Alejandro, para no abrumarlos con todo el
> codigo genere un ejemplo con la tabla que calculo en base a los


comprobantes
> de ingreso y egreso de mercaderia
> Lo que hago es esto
> set nocount on
> 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
>
> Para armar el ejemplo use Tmp en vez de @Table
> Lo que hago es primero llenar @Table y despues tratar de calcular el


saldo
> que de momento hago asi
>
> Declare @Fecha smalldatetime
> Declare c cursor for select Fecha_Hora from @Table order by Fecha_Hora
> open c
> fetch next from c into @Fecha
> while @@Fetch_Status = 0
> begin
> update @Table set Saldo > > (Select sum(Ingreso) - sum(Egreso) from @Table T2 where
> T2.Fecha_Hora <= @Fecha )
> where Fecha_Hora = @Fecha
> fetch next from c into @Fecha
> end
> close c
> deallocate c
>
> Asi que lo que necesitaria es la misma sentencia que haz hecho pero para


el
> update y ahi es donde fallo
>
> Gracias por entender y por bancarte mi mareo
> Saludos
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Trata:
> >
> > Create Table Tmp(
> > Fecha_Hora smalldatetime,
> > No_Comprobante int,
> > No_Linea smallint,
> > Lote int,
> > Pcb smallint,
> > Pedido smallint,
> > Ingreso smallint,
> > Egreso smallint,
> > Saldo smallint
> > )
> > go
> >
> > Insert into Tmp values('2005-05-02 01:15:00',4,1,21,6,334,167,0,0)
> > Insert into Tmp values('2005-05-03 15:07:10',5,1,29,6,167,167,0,0)
> > Insert into Tmp values('2005-07-01 12:25:15',6,1,12,6,200,50,0,0)
> > Insert into Tmp values('2005-07-01 21:05:52',25,1,1,6,200,0,140,0)
> > go
> >
> > select
> > a.fecha_hora,
> > a.ingreso,
> > a.egreso,
> > sum(b.ingreso - b.egreso) as saldo
> > from
> > tmp as a
> > inner join
> > tmp as b
> > on b.Fecha_Hora <= a.Fecha_Hora
> > group by
> > a.fecha_hora,
> > a.ingreso,
> > a.egreso
> > order by
> > 1 asc
> > go
> >
> > drop table tmp
> > go
> >
> > Si este calculo lo quieres hacer por producto, entonces debes agregar


una
> > condicion mas al "inner join", que es:
> >
> > a.product_id = b.productid
> >
> >
> > AMB
> >
> >
> > "Pablodegerli" wrote:
> >
> > > 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 AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida