Si utilizas subconsultas, el proceso se va a ralentizar una barbaridad.
Mihura propone usar una función para realizar estas operaciones.
La función en tu caso sería esta:
'---------------------------------------------------------------------------------------------
' Autor : JUANJO LUNA -Lunasoft- usando ejemplo de JESUS MANSILLA CASTELLS -Mihura-
' Fuente: https://accessaplicaciones.com/ejemplos.html#sq03
'---------------------------------------------------------------------------------------------
Public Function RT_DividirSQL(nDato) As Double
'variable que no se pierde entre las distintas llamadas
Static nDIVISION As Double
If IsNull(nDato) Or nDIVISION = 0 Then 'si nDato es nulo o cero: Funcion = cero y inicializar
RT_DividirSQL = 0
GoTo Inicializar
End If
RT_DividirSQL = nDato / nDIVISION
Inicializar:
nDIVISION = Nz(nDato, 0)
End Function
El uso de Static te permite almacenar el valor del registro anterior. y con los if devolvemos 0 en caso de desbordamiento (divisiones nulas)
Para que funcione correctamente, debemos usar una consulta con un primer registro NULO que inicialice la variable static. Por eso en el sql comenzaremos con un where 1=0 UNION y la consulta en sí.
La consulta sql quedaría así:
SELECT Operaciones.IdOperacion, Operaciones.Fecha, Operaciones.Precio, RT_DividirSQL(null) AS Division
FROM Operaciones WHERE 1=0
UNION SELECT Operaciones.IdOperacion, Operaciones.Fecha, Operaciones.Precio,RT_DividirSQL([Precio]) AS Division
FROM Operaciones;
Termino diciendo que en el fondo la respuesta es de Mihura, que se ha molestado en leer tu pregunta y guiarme para llegar a la respuesta correcta con fines didácticos, ya que tenía interés por aprender este tipo de lógica.
Descripción del problema: operar con datos entre registros
Para operar con datos entre registros puedes visitar este enlace: Tecsys Proyectos Informáticos S.L. (accessaplicaciones.com)
Si utilizas subconsultas, el proceso se va a ralentizar una barbaridad. Mihura propone usar una función para realizar estas operaciones.
La función en tu caso sería esta:
El uso de Static te permite almacenar el valor del registro anterior. y con los if devolvemos 0 en caso de desbordamiento (divisiones nulas)
Para que funcione correctamente, debemos usar una consulta con un primer registro NULO que inicialice la variable static. Por eso en el sql comenzaremos con un where 1=0 UNION y la consulta en sí.
La consulta sql quedaría así:
Archivos: sumacontinua.zip
Termino diciendo que en el fondo la respuesta es de Mihura, que se ha molestado en leer tu pregunta y guiarme para llegar a la respuesta correcta con fines didácticos, ya que tenía interés por aprender este tipo de lógica.
MUUUUUUUchas gracias maestro.