Sumatoria parcial de valores
Comenzado por
bcp9520
, sep 13 2013 08:42
6 respuestas en este tema
#1
Escrito 13 septiembre 2013 - 08:42
Estimados buenos días.
Tengo la siguiente necesidad de sumar en forma parcial los valores de una columna(Col3) e ir mostrandolos en otra(Col6). Me explico mejor con la tabla adjunta. Segun cambie en Col1,Col2, Col3 debo sumar Col5 y calcular Col6.
Se de la clausula OVER de SQL pero las funciones que viene ahora con la que se puede hacer este calculo son para SQL 2012 y lo necesito para SQL 2008 por lo que no las puedo ocupar.
Desde ya les agradezco por su apoyo.
saludos.
Col1 Col2 Col3 Col4 Col5 Col6
2107 2013 1 1 35235.83000 35235.83
2107 2013 2 1 55539.15000 90774.98
2107 2013 3 1 73479.20000 164254.18
2107 2013 4 1 63333.50000 227587.68
2107 2013 5 1 39842.00000 267429.68
2020 2013 1 1 5 5
2020 2013 2 1 15 20
2020 2013 3 1 8 28
Tengo la siguiente necesidad de sumar en forma parcial los valores de una columna(Col3) e ir mostrandolos en otra(Col6). Me explico mejor con la tabla adjunta. Segun cambie en Col1,Col2, Col3 debo sumar Col5 y calcular Col6.
Se de la clausula OVER de SQL pero las funciones que viene ahora con la que se puede hacer este calculo son para SQL 2012 y lo necesito para SQL 2008 por lo que no las puedo ocupar.
Desde ya les agradezco por su apoyo.
saludos.
Col1 Col2 Col3 Col4 Col5 Col6
2107 2013 1 1 35235.83000 35235.83
2107 2013 2 1 55539.15000 90774.98
2107 2013 3 1 73479.20000 164254.18
2107 2013 4 1 63333.50000 227587.68
2107 2013 5 1 39842.00000 267429.68
2020 2013 1 1 5 5
2020 2013 2 1 15 20
2020 2013 3 1 8 28
#2
Escrito 13 septiembre 2013 - 09:12
¿podrías detallar mejor los cálculos que necesitas? por que no le he entendido bien a tu duda
#3
Escrito 13 septiembre 2013 - 01:35
Si bueno, la tabla no salio muy ordenada...
Gracias, como comentaba, tengo 5 columnas en la cual la ultima tiene unos valores por mes, y necesito mostra en una columna adicional con una sumatoria acumulada por cada uno de los meses. La ultima columna es la que necesito calcular, estuve revisando la clausula Over de SQL 2012 y esta tiene una funcion que resuleve el problema, pero actualmente estamos utilizando SQL 2008.
1 10 10
2 15 25
3 20 45
4 6 51
5 7 58
gracias por la ayuda.
Gracias, como comentaba, tengo 5 columnas en la cual la ultima tiene unos valores por mes, y necesito mostra en una columna adicional con una sumatoria acumulada por cada uno de los meses. La ultima columna es la que necesito calcular, estuve revisando la clausula Over de SQL 2012 y esta tiene una funcion que resuleve el problema, pero actualmente estamos utilizando SQL 2008.
1 10 10
2 15 25
3 20 45
4 6 51
5 7 58
gracias por la ayuda.
#4
Escrito 13 septiembre 2013 - 03:04
Yo lo resolvería de la siguiente manera
Crearia una temporal de sesion
luego Crearia un cursor con la siguiente información:
Luego al recorrerlo haría lo siguiente:
connsulto el acumulado hasta el mes definido por el cursor
y finalmente inserto los valores en la temporal
para finalizar devuelvo los resultados así:
Crearia una temporal de sesion
Create Table #Tablaacumulados (Mes int, totalmensual int, totalacumulado int)
luego Crearia un cursor con la siguiente información:
Select Mes, Sum(Campo) TotalMEnsual
from tabla
group by mes
Luego al recorrerlo haría lo siguiente:
connsulto el acumulado hasta el mes definido por el cursor
Select Sum(Campo) into @acumuladototal
from tabla
where mes <= @mes
y finalmente inserto los valores en la temporal
insert into #Tablaacumulados
@mes, @totalmensual, @acumuladototal
para finalizar devuelvo los resultados así:
select *
from #TablaAcumulados
#5
Escrito 16 septiembre 2013 - 02:10
Estimado, buenas tardes.
Muchas gracias por la información, me fue de gran utilidad el codigo que me facilitaste, solo me queda una duda.
Me he percatado que al llamar la tabla temporal al pirmer grupo de información le quita una linea y al ultimo le duplica una línea. Me explico mejor.
El select al declarar el cursor me entrega esta información
171 2013 1 64.13000 23364.11000
171 2013 2 0.00000 37935.72000
171 2013 3 33026.59000 67413.17000
171 2013 4 20415.50000 42043.93000
171 2013 5 32292.99000 66205.53000
171 2013 6 19985.35000 42105.84000
2107 2013 1 0.00000 35235.83000
2107 2013 2 0.00000 55539.15000
2107 2013 3 0.00000 73479.20000
2107 2013 4 0.00000 63333.50000
2107 2013 5 0.00000 39842.00000
y luego de todo el proceso al llamar la tabla temporal me entrega
20130200 64.13 23364.11 171
20130300 64.13 61299.83 171
20130400 33090.72 128713.00 171
20130500 53506.22 170756.93 171
20130600 85799.21 236962.46 171
20130100 0.00 0.00 2107
20130200 0.00 35235.83 2107
20130300 0.00 90774.98 2107
20130400 0.00 164254.18 2107
20130500 0.00 227587.68 2107
20130500 0.00 227587.68 2107
gracias por el apoyo
Muchas gracias por la información, me fue de gran utilidad el codigo que me facilitaste, solo me queda una duda.
Me he percatado que al llamar la tabla temporal al pirmer grupo de información le quita una linea y al ultimo le duplica una línea. Me explico mejor.
El select al declarar el cursor me entrega esta información
171 2013 1 64.13000 23364.11000
171 2013 2 0.00000 37935.72000
171 2013 3 33026.59000 67413.17000
171 2013 4 20415.50000 42043.93000
171 2013 5 32292.99000 66205.53000
171 2013 6 19985.35000 42105.84000
2107 2013 1 0.00000 35235.83000
2107 2013 2 0.00000 55539.15000
2107 2013 3 0.00000 73479.20000
2107 2013 4 0.00000 63333.50000
2107 2013 5 0.00000 39842.00000
y luego de todo el proceso al llamar la tabla temporal me entrega
20130200 64.13 23364.11 171
20130300 64.13 61299.83 171
20130400 33090.72 128713.00 171
20130500 53506.22 170756.93 171
20130600 85799.21 236962.46 171
20130100 0.00 0.00 2107
20130200 0.00 35235.83 2107
20130300 0.00 90774.98 2107
20130400 0.00 164254.18 2107
20130500 0.00 227587.68 2107
20130500 0.00 227587.68 2107
gracias por el apoyo
#6
Escrito 16 septiembre 2013 - 02:47
Estimado encontre el problema.
Mi error era que dentro del while coloque el @@fetch next antes del proceso que necesito ejecutar, y debia colocarlo al final. Pro esta razón me tomaba mal el valor.
Como te comente, me fue muy util la información que me entregaste.
gracias y saludos.
Mi error era que dentro del while coloque el @@fetch next antes del proceso que necesito ejecutar, y debia colocarlo al final. Pro esta razón me tomaba mal el valor.
Como te comente, me fue muy util la información que me entregaste.
gracias y saludos.
#7
Escrito 16 septiembre 2013 - 11:02
Estimado encontre el problema.
Mi error era que dentro del while coloque el @@fetch next antes del proceso que necesito ejecutar, y debia colocarlo al final. Pro esta razón me tomaba mal el valor.
Como te comente, me fue muy util la información que me entregaste.
Excelente amigo. Saludos y gracias por comentar la solución.