Campo de acumulados en consulta agrupando

Veo varios ejemplos pero me armo un lío aunque me imagino que tiene que ser sencillo. Yo lo que pretendo es lo siguiente: Tengo una consulta llamada INGRESOS con cuatro campos: ID, JORNADA, COLABORADOR Y RECAUDADO. Pretendo crear un nuevo campo llamado ACUMULADO en la que me acumule los ingresos por COLABORADOR Y JORNADA.

Imagino que no es muy complicado pero no lo doy quitado. El código que pongo más abajo me lo acumula correctamente por ID, pero si en lugar de ID pongo COLABORADOR como es un campo tipo texto me da error.

Básicamente quería estos resultados en la consulta:

Colaborador ID jornada recaudado ACUMULADO

Pepito 1 1 5 5

Pepito 3 2 12 17

...

Luis 2 1 4 4

Luis 4 2 10 14

...

Acumulado: DSuma("recaudado";"ingresos";"[id]<=" & [id])

1 Respuesta

Respuesta
Acumulado: DSuma("recaudado";"ingresos";"[COLABORADOR]<='" & [COLABORADOR]&"'")

La fórmula funciona pero no da el resultado esperado. Yo lo que quiero son los acumulados como en el ejemplo.

Colaborador                         ID                 jornada                   recaudado               ACUMULADO

Pepito                                     1                       1                               5€                                  5€

Pepito                                     3                       2                              12€                               17€

...

Luis                                         2                       1                                4€                                 4€

Luis                                         4                       2                               10€                               14€

...

Crea un campo ACUMULADO en la tabla TABLA_INGRESOS:

Y en un módulo:

Option Explicit
Option Compare Database
Sub Sumante()
'pone ceros en el campo ACUMULADO
CurrentDb.Execute ("UPDATE TABLA_INGRESOS SET ACUMULADO=0")

'declara variables
Dim colaborador, colaboradorAnt As String
Dim recaudado As Double
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM TABLA_INGRESOS")
'recorre la tabla
rs.MoveFirst
Do While Not rs.EOF
colaborador = rs("COLABORADOR")
'si cambia el colaborador, pone a 0 la variable para el sumatorio
If colaborador <> colaboradorAnt Then
recaudado = 0
End If

rs.Edit
recaudado = recaudado + rs("RECAUDADO")
rs("ACUMULADO") = recaudado
rs.Update
rs.MoveNext
'asigna colaborador del registro inmediatamente anterior
colaboradorAnt = colaborador
Loop
rs.Requery
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas