Ir al contenido



Foto

Sumatoria parcial de valores


  • Por favor identifícate para responder
6 respuestas en este tema

#1 bcp9520

bcp9520

    Member

  • Miembros
  • PipPip
  • 18 mensajes

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

  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.921 mensajes
  • LocationMéxico

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
  • 0

#3 bcp9520

bcp9520

    Member

  • Miembros
  • PipPip
  • 18 mensajes

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.


  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.921 mensajes
  • LocationMéxico

Escrito 13 septiembre 2013 - 03:04

Yo lo resolvería de la siguiente manera

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

  • 0

#5 bcp9520

bcp9520

    Member

  • Miembros
  • PipPip
  • 18 mensajes

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
  • 0

#6 bcp9520

bcp9520

    Member

  • Miembros
  • PipPip
  • 18 mensajes

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.

  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.921 mensajes
  • LocationMéxico

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.
  • 0