SQL - Calcular Costo Promedio

 
Vista:
sin imagen de perfil
Val: 37
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Calcular Costo Promedio

Publicado por Jorge (19 intervenciones) el 23/01/2018 06:34:25
Buenos días a todos.
Esta es la cosa, hace ya unas semanas que trato de resolver esto pero ya estoy nublado y no se me ocurre nada

Hago una consulta donde obtengo la Cantidad de Saldo de la siguiente forma:
el cálculo de la cantidad de Saldo es fácil, es algo así
CantEnt - CantSal +
(Subconsulta:
Suma(CantEnt) - Suma(CantSal) donde SubCons.Prod=Consulta.Prod y SubCons.Ord<Consulta.Ord)
s7J9Cvn

ordenado por PROD y por ORD (en el ejemplo solo se ve un producto, pero pueden ser varios) y claro, el saldo se calcula por producto y ORD es el orden en que van a ser contabilizados (en realidad es un número más largo y complejo, pero para fines didácticos le pongo 0,1,2,3,4,... etc)

Ahora al asunto,
A partir de la consulta obtenida debo calcular el saldo Valorizado, y debería quedar de la siguiente forma
y7dkHpR

El problema es, que debo calcular el costo promedio y los saldos valorizados dependiendo del resultado anterior (o sea del ORD anterior)
donde
- CostoUnSal es el CostoUnSaldo Anterior (es decir el Costo Promedio Anterior)
- CostoTotSal es CantSal * CostoUnSal (o sea que para esto debo saber el Costo Promedio Anterior)
- CostoTotSaldo es CostoTotSaldo Anterior + CostoTotEnt - CostoTotSal
- CostoUnSaldo (o sea Costo Promedio) es CostoTotSaldo / CantSaldo
- II es Inventario Inicial, CP es Compra, VT es Venta

ufff, bueno si lo grafico sería algo así:
RkvOVtM

entonces se trata de calcular valores según el valor anterior

**********************************************
Para no tener que poner toda la consulta, la pondré como tabla, ordenada por ORD
Tabla Saldos:
1
CREATE TABLE Saldos( Ord int, Prod varchar(100), Mov char(1), CantEnt numeric(20,8), CostoUnEnt numeric(20,8), CostoTotEnt numeric(20,8), CantSal numeric(20,8), CantSaldo numeric(20,8))

Insertar datos de prueba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (0, 'Producto 1', 'II' , 232, 20.8575, 4838.94, NULL, 232)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (1, 'Producto 1', 'VT' , NULL, NULL, NULL, 116, 116)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (2, 'Producto 1', 'VT' , NULL, NULL, NULL, 116, 0)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (3, 'Producto 1', 'CP' , 232, 20.9175, 4852.86, NULL, 232)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (4, 'Producto 1', 'VT' , NULL, NULL, NULL, 111, 121)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (5, 'Producto 1', 'CP' , 116, 20.9025, 2424.69, NULL, 237)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (6, 'Producto 1', 'CP' , -28, 20.91, -585.48, NULL, 209)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (7, 'Producto 1', 'VT' , NULL, NULL, NULL, 116, 93)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (8, 'Producto 1', 'VT' , NULL, NULL, NULL, -120, 213)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (9, 'Producto 1', 'CP' , 116, 21.2025, 2459.49, NULL, 329)
INSERT INTO Saldos(Ord, Prod, Mov, CantEnt, CostoUnEnt, CostoTotEnt, CantSal, CantSaldo)
VALUES (10, 'Producto 1', 'VT' , NULL, NULL, NULL, 116, 213)

Seguiré intentando
Gracias.
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

Calcular Costo Promedio

Publicado por Roberto (3 intervenciones) el 15/04/2019 23:16:38
Lograron resolver el problema presentado en esta consulta??, estoy interesado en la solución
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 Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Calcular Costo Promedio

Publicado por Vega (73 intervenciones) el 16/04/2019 21:13:22
Esta pregunta es de las buenas! :D
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 Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Calcular Costo Promedio

Publicado por Vega (73 intervenciones) el 16/04/2019 21:47:20
la intentaría si supiera que quien puso éste post aún lee en el foro...
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

Calcular Costo Promedio

Publicado por Roberto (3 intervenciones) el 17/04/2019 01:55:56
Les agradecería si tienen alguna idea de como resolverlo con sql server.

Esto se puede resolver con otros lenguajes como c# por mencionar uno pero es una solución extremadamente lenta cuando son muchos los registros a procesar
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 Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Calcular Costo Promedio

Publicado por Vega (73 intervenciones) el 17/04/2019 10:44:31
La verdad es que no lo veo dificil. Con un a función lag() or Lead() se consiguen estas cosas fácilmente. Personalmente, no consigo entender el diagrama que nos puso al abrir la pregunta y si no entiendo los parámetros del problema no merece la pena empezar... yo tengo dudas al respecto y quisiera entender el razonamiento primero antes de ponerme a escribir sql

Roberto, si tienes una consulta más concreta, mándame un mensaje con la URL de tu pregunta en el foro e intentaré responder...
Saludos
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