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

#6 Sandro
05/09/2005 - 18:15 | Informe spam
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
#7 Pablodegerli
05/09/2005 - 19:00 | Informe spam
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
#8 Sandro
05/09/2005 - 19:15 | Informe spam
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
#9 Pablodegerli
05/09/2005 - 19:43 | Informe spam
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
#10 Sandro
05/09/2005 - 20:08 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida