SQL - Suma y Resta, Ingresos y Salidas, Inventario Permanente Valorizado

 
Vista:
Imágen de perfil de cotizandopc

Suma y Resta, Ingresos y Salidas, Inventario Permanente Valorizado

Publicado por cotizandopc (3 intervenciones) el 17/10/2016 18:16:22
Buenas estimados, el título puede ser algo confuso, sin embargo, aún no encuentro palabras cortas para describir lo que necesito. Ahora el contexto es el siguiente, estoy a cargo de realizar el inventario permanente Valorizado, en la parte del cálculo de saldos de ingresos y salidas, tengo el siguiente inconveniente.

Cuadro

El asunto es que debe quedar de la siguiente manera:

Tabla-final

Bueno, no sé si me dejo entender, pero el asunto es que el primer ingreso se reste con su respectiva salida, lo que "queda" se sume con su respectivo ingreso y se reste con su respectiva salida, lo que queda de ello se sume con su respectivo ingreso y se reste con su respectiva Salida, y así sucesivamente, lo mismo va para los montos que tiene el inventario permanente valorizado, los cuales no los pongo aquí por que me bastaría saber como podría realizar lo de los ingresos y con los montos sería lo mismo.

Y sumergiendonos un poco en el tema, esto se hacer por sucursal y material, esto último lo menciono solo para aquellos que no conocen como se agrupa esto de los cálculos para inventario permante valorizado, solo por eso.

Agradezco cualquier guía que me lleve a la solución de este inconveniente.
Atte.: Desde Perú.
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: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma y Resta, Ingresos y Salidas, Inventario Permanente Valorizado

Publicado por Isaias (1921 intervenciones) el 18/10/2016 05:21:53
¿En que MOTOR DE BASE DE DATOS?
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: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma y Resta, Ingresos y Salidas, Inventario Permanente Valorizado

Publicado por leonardo_josue (1173 intervenciones) el 18/10/2016 16:36:20
Hola cotizandopc:

Considerando que sólo haya una y sólo una entrada y/o por día, entonces puedes hacerlo mediante una subconsulta para calcular el acumulado hasta la fecha de cada registro, es decir, algo como esto:

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
mysql> SELECT * FROM tabla;
+------+---------+------------+------------+---------+---------+
| id   | kanexo  | kcodexist  | kfecdoc    | kuniing | kuniret |
+------+---------+------------+------------+---------+---------+
|   24 | 0001001 | BAJ1020099 | 2016-01-01 |   52.00 |    0.00 |
|   25 | 0001001 | BAJ1020099 | 2016-01-05 |    0.00 |    3.00 |
|   26 | 0001001 | BAJ1020099 | 2016-01-06 |    0.00 |    2.00 |
|   27 | 0001001 | BAJ1020099 | 2016-01-09 |    0.00 |    3.00 |
|   28 | 0001001 | BAJ1020099 | 2016-01-13 |    0.00 |   20.00 |
+------+---------+------------+------------+---------+---------+
5 rows in set (0.00 sec)
 
mysql> SELECT
    ->   T1.id,
    ->   T1.kanexo,
    ->   T1.kcodexist,
    ->   T1.kfecdoc,
    ->   T1.kuniing,
    ->   T1.kuniret,
    ->   ( SELECT SUM(kuniing) - SUM(kuniret)
    ->     FROM tabla T2
    ->     WHERE T2.kanexo = T1.kanexo
    ->           AND T2.kfecdoc <= T1.kfecdoc
    ->     GROUP BY T2.kanexo) total
    -> FROM tabla T1;
+------+---------+------------+------------+---------+---------+-------+
| id   | kanexo  | kcodexist  | kfecdoc    | kuniing | kuniret | total |
+------+---------+------------+------------+---------+---------+-------+
|   24 | 0001001 | BAJ1020099 | 2016-01-01 |   52.00 |    0.00 | 52.00 |
|   25 | 0001001 | BAJ1020099 | 2016-01-05 |    0.00 |    3.00 | 49.00 |
|   26 | 0001001 | BAJ1020099 | 2016-01-06 |    0.00 |    2.00 | 47.00 |
|   27 | 0001001 | BAJ1020099 | 2016-01-09 |    0.00 |    3.00 | 44.00 |
|   28 | 0001001 | BAJ1020099 | 2016-01-13 |    0.00 |   20.00 | 24.00 |
+------+---------+------------+------------+---------+---------+-------+
5 rows in set (0.00 sec)

Observa que la consulta se hace sobre la misma tabla, por lo tanto es necesario poner alias distintos (T1, T2). Dale un vistazo para ver si es lo que necesitas.

Saludos
Leo.
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
Imágen de perfil de cotizandopc

Suma y Resta, Ingresos y Salidas, Inventario Permanente Valorizado

Publicado por cotizandopc (3 intervenciones) el 18/10/2016 17:38:23
Gracias por el apoyo, leonardo_josue, eso es exactamente lo que quería, y te cuento algo curioso, el día de ayer yo y una compañera realizamos un script para solucionar esto, lo pongo solo como para compartir. Agradezco enormemente el apoyo.

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
BEGIN
DECLARE @COUNT INT = 0
,@SALDO INT = 0
,@TOT INT
,@MINIMO	INT = 0
,@CONTPRIMERSELECT	INT
,@COUNT2			INT = 1		--CORRELATIVO
,@NUM	INT
,@CANT			INT
 
 
--CON ESTO OBTENEMOS LA CANTIDAD DE REGISTROS AGRUPADOS
SET  @CONTPRIMERSELECT =   (SELECT COUNT(*) FROM (SELECT MIN(ID) AS ID
FROM #TMP_1	Z	GROUP BY Z.KANEXO,Z.KCODEXIST) AS TAB)
 
WHILE @COUNT2 <= @CONTPRIMERSELECT
BEGIN
	--MINIMO POR GRUPO
	SET @MINIMO = (	SELECT IDX AS MINIMO  FROM (SELECT ROW_NUMBER() OVER(ORDER BY IDX ASC) AS XX, IDX FROM
			(SELECT  MIN(Z.ID) IDX FROM #TMP_1 Z
		GROUP BY Z.KANEXO,Z.KCODEXIST) AS TAB ) AS AMANECER WHERE XX = @COUNT2)
 
	SET @CANT =	(SELECT C FROM (SELECT ROW_NUMBER() OVER(ORDER BY IDX ASC) AS XX,C
		 FROM (SELECT  MIN(Z.ID) IDX,COUNT(*) C FROM #TMP_1 Z GROUP BY Z.KANEXO,Z.KCODEXIST) AS T1)
		 AS T2 WHERE XX=@COUNT2)
---------------------------------------------------------------------------------------------------------
			WHILE @COUNT < @CANT
				BEGIN
					SELECT  @SALDO = ( @SALDO +KUNIING  - KUNIRET)
							FROM #TMP_1 
							WHERE ID = @MINIMO + @COUNT
 
					SELECT A.KUNIING,A.KUNIRET,@SALDO FROM #TMP_1 A
							WHERE A.ID = @MINIMO + @COUNT
 
					SET @COUNT = @COUNT +1
				END
				SET @SALDO = 0
---------------------------------------------------------------------------------------------------------
				SET @COUNT  = 0
				SET @COUNT2 = @COUNT2 + 1
END
 
END

Saludos desde el Perú.
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