SQL Server - Re calcular saldo

 
Vista:

Re calcular saldo

Publicado por ricardo (6 intervenciones) el 17/08/2015 20:22:40
Buenos a todos tengo una duda : estoy trabajando con SQL Sever 2008 R2 y tengo una tabla Kardex

tengo los siguientes campos

Cod_Producto - Fecha - CanEntrada - CantSalida -SaldoTotal
0001 17/10/2015 - 10 - 0 - 10
0001 18/10/2015 - 20 - 0 - 30
0001 19/10/2015 - 40 - 0 - 70
0001 20/10/2015 - 0 - 20 - 50

Mi pregunta es la siguiente si yo elimino o actualizo el registro en donde ingrese 20,40 o posterior ítem como puedo hacer para re calcular de nuevo el saldo Total esa es mi duda que debo hacer .

Gracias por sus ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re calcular saldo

Publicado por Isaias (4558 intervenciones) el 17/08/2015 21:15:52
Te dejo este ejemplo, adáptalo a tus necesidades

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
drop table #Tmp
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)
Insert into #Tmp values('2005-07-02 21:05:52',25,1,1,6,200,9,0,0)
Insert into #Tmp values('2005-07-03 21:05:52',25,1,1,6,200,0,140,0)
Insert into #Tmp values('2005-07-04 21:05:52',25,1,1,6,200,100,0,0)
Insert into #Tmp values('2005-07-05 21:05:52',25,1,1,6,200,0,150,0)
Insert into #Tmp values('2005-07-06 21:05:52',25,1,1,6,200,20,0,0)
Insert into #Tmp values('2005-07-07 21:05:52',25,1,1,6,200,0,20,0)
Insert into #Tmp values('2005-07-08 21:05:52',25,1,1,6,200,100,0,0)
Insert into #Tmp values('2005-07-09 21:05:52',25,1,1,6,200,0,20,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:

1
a.product_id = b.productid
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Re calcular saldo

Publicado por ricardo (6 intervenciones) el 17/08/2015 22:03:57
Muchas gracias voy a intentar adaptarlo gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re calcular saldo

Publicado por nick (20 intervenciones) el 22/04/2020 08:56:14
Gracias señor Isaias Excelente como siempre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re calcular saldo

Publicado por nick (20 intervenciones) el 27/04/2020 09:49:49
Señor Isaias disculpe usted,probe la solucion que facilito con un ejemplo minimamente diferente al original y el saldo no me da correctamente,use su codigo y uno con Over y ninguno resulta aqui dejo los codigos esperando que pueda usted ver mi error y ayudarme a solucionarlo agradezco de antemano su ayuda ya que laimplementacion del codigo me es en este momento muy oportuna saludos cordiales:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
declare @temp table(Fecha smalldatetime default getdate(), Prod int
not null,entrada decimal(10,2) default 0,salida decimal(10,2) default 0)
 
insert into @temp (prod,entrada,salida) values(1,5,''),(2,10,''),(1,5,''),(1,'',3)
,(2,5,''),(3,5,''),(2,'',5),(1,'',5)
 
select t1.Fecha, t1.prod,t1.entrada,t1.salida,sum(t2.entrada-t2.salida)as saldo
from @temp as t1
 join
@temp as  t2
 
on  t2.fecha<=t1.fecha and t2.Prod<=t1.Prod
group by t1.Fecha,t1.prod,t1.entrada,t1.salida
order by t1.Fecha,t1.Prod asc
---------------------------------------------------------------------
declare @temp table(Fecha smalldatetime default getdate(), Prod int
 not null,entrada decimal(10,2) default 0,salida decimal(10,2) default 0)
 
insert into @temp (prod,entrada,salida) values(1,5,''),(2,10,''),(1,5,''),(1,'',3)
,(2,5,''),(3,5,''),(2,'',5),(1,'',5)
declare @suma int
set @suma=0
select t1.Fecha, t1.prod,t1.entrada,salida,sum(t1.entrada-t1.salida)
over(partition by t1.prod order by t1.fecha,t1.prod) as saldo
from @temp as t1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re calcular saldo

Publicado por Isaias (4558 intervenciones) el 27/04/2020 21:45:32
Estoy analizando su primer query y resulta ser que tiene datos NO COHERENTES, esto es, no se puede SACAR mas del producto que se tiene, ¿cierto?

Si tengo el stock de 3, no puedo SACAR 5, seria ilógico



Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re calcular saldo

Publicado por nick (20 intervenciones) el 28/04/2020 05:28:34
Gracias por su pronta respuesta,Efectivamente no es coherente el resultado pero la insercion no es incoherente lo hice de nuevo con los movimientos por producto para que se aprecie mejor y continua dando el error,asi quedo el codigo:

declare @temp table(Fecha smalldatetime default getdate(), Prod int
not null,entrada decimal(10,2) default 0,salida decimal(10,2) default 0)

insert into @temp (prod,entrada,salida) values(1,5,''),(1,5,''),(1,'',3),(1,'',5)
,(2,10,''),(2,'',3),(3,5,''),(3,15,''),(3,'',10)

select t1.Fecha, t1.prod,t1.entrada,t1.salida,sum(t2.entrada-t2.salida)as saldo
from @temp as t1
join
@temp as t2

on t2.fecha<=t1.fecha and t2.Prod<=t1.Prod
group by t1.Fecha,t1.prod,t1.entrada,t1.salida
order by t1.Fecha,t1.Prod asc

Notese que el producto 1 se inserto primero una entrada de 5 luego otra entrada de 5 una salida de 3 y una salida de cinco,pero al ejecutar el query noto que esta desordenado primero la salida de 3 luego la salida de 5 y una sola entrada de 5 cuando en realidad son dos entradas de 5
como puede ver aqui:

Captura1
quedo muy atento a su respuesta saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar