Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Tabla datos acumulados

Estas en el tema de Tabla datos acumulados en el foro de SQL Server en Foros del Web. Hola amigos, si alguien pudiese ayudarme a saber como hacer una tabla con valores acumulados, necesito saber para las semana futuras cuantos productos debería entregar. ...
  #1 (permalink)  
Antiguo 16/05/2016, 14:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 69
Antigüedad: 17 años
Puntos: 0
Tabla datos acumulados

Hola amigos, si alguien pudiese ayudarme a saber como hacer una tabla con valores acumulados, necesito saber para las semana futuras cuantos productos debería entregar.



semana productos (acumulados)

semana 1 1 producto a entregar
semana 2 2 productos + productos de semana 1
semana 3 1 productos + productos de semana 1 + productos de semana 2
semana 4 5 productos + productos de semana 1 + productos de semana 2 + productos de semana 3

Gracias
  #2 (permalink)  
Antiguo 16/05/2016, 16:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Tabla datos acumulados

Con un query sencillo no sale lo que necesitas, seria hacer un procedure o funcion, algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. semana INT,
  4. productos INT,
  5. acumulado INT
  6. )
  7.  
  8.  
  9. INSERT INTO #temp (semana,productos) VALUES (1,1)
  10. INSERT INTO #temp (semana,productos) VALUES (2,3)
  11. INSERT INTO #temp (semana,productos) VALUES (3,5)
  12. INSERT INTO #temp (semana,productos) VALUES (4,3)
  13. INSERT INTO #temp (semana,productos) VALUES (5,6)
  14.  
  15.  
  16. SELECT *, IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp
  17.  
  18. DECLARE @x INT
  19. DECLARE @acumulado INT
  20. DECLARE @producto INT
  21. SET @x=1
  22.  
  23.  
  24. while @x<=(SELECT COUNT(*) FROM #temp2)
  25. BEGIN
  26.    
  27.     SELECT @producto=productos FROM #temp2 WHERE rn=@x
  28.  
  29.  
  30.     IF (@x=1)
  31.         SELECT @acumulado=productos FROM #temp2 WHERE rn=1
  32.     ELSE
  33.         SET @acumulado=@acumulado + @producto
  34.  
  35.     UPDATE #temp2 SET acumulado=@acumulado WHERE rn=@x
  36.     SET @x=@x+1
  37. END
  38.  
  39. SELECT semana,productos,acumulado FROM #temp2

Resultado:
semana productos acumulado
1 1 1
2 3 4
3 5 9
4 3 12
5 6 18
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/05/2016, 07:04
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Tabla datos acumulados

Si usás una versión de 2012 y adelante, podés obtener los valores acumulados así:
Código SQL:
Ver original
  1. SELECT  *,
  2.         SUM(productos) OVER(ORDER BY semana) OffsetCol2
  3. FROM    #temp;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 17/05/2016, 09:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 69
Antigüedad: 17 años
Puntos: 0
Respuesta: Tabla datos acumulados

GeriReshef tengo versión 2008, voy a probar con lo que dice Libras

Gracias a ambos.-
  #5 (permalink)  
Antiguo 17/05/2016, 09:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 69
Antigüedad: 17 años
Puntos: 0
Respuesta: Tabla datos acumulados

funciona, pero como lo hago si la semana es variable ??

es decir, para un caso puede ser 4 semanas, pero en otro caso 20 o 10 semanas.


gracias.
  #6 (permalink)  
Antiguo 17/05/2016, 09:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Tabla datos acumulados

Ahi tienes el ejemplo para 4 semanas que fue lo que pediste, si son mas semanas, depende de como esta la tabla donde guardas la informacion pero seria parecido, si te fijas en el ejemplo que puse si agregas una "semana" va a obtener el resultado esperado :)(pediste 4 semanas y yo muestro 5)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:18.