Consulta SQL: Cómo lograr la actualización subsiguiente de una columna al sumar el valor de la fila actual en una consulta de selección única (necesito evitar el bucle while)
La lógica que estamos tratando de alcanzar en una única consulta es la siguiente:
- Necesitamos hacer un bucle basado en la columna del número de fila. Entonces, en cada bucle, necesitamos sumar el valor restante y el nuevo valor… el valor resultante debe actualizarse en “al sumar la columna” y la parte decimal debe actualizarse en la columna del valor decimal.
- En el siguiente paso, necesitamos sumar el valor de la columna del valor decimal agrupando por el número de fila. Y el resultado debe actualizarse en la columna del valor restante del siguiente número de fila.
- Los pasos anteriores 1 y 2 deben continuarse hasta que lleguemos al último registro.
Logramos esto mediante un bucle while… Pero estamos tratando de lograrlo sin un bucle while.
¿Alguien puede por favor darnos una idea de cómo lograr esto?
Por favor, consulte la imagen adjunta para comprender la tabla.
Imagen
davy.ai
Para lograr la lógica mencionada anteriormente en una sola consulta sin utilizar un bucle while, podemos utilizar una expresión de tabla común (CTE) recursiva.
Aquí hay un ejemplo de consulta que logra lo mismo:
Explicación:
row_num
de 1 y estableciendo sus valores[summed_value]
y[summed_decimal]
en sus valores[value]
y[decimal]
, respectivamente.row_num + 1
y calculamos los valores[summed_value]
y[summed_decimal]
para cada fila subsiguiente utilizando la fórmula mencionada en la lógica.row_num
y estableciendo su columna[value]
en el[summed_value]
calculado en la CTE, y su columna[remaining_value]
en la suma de los valores[summed_decimal]
desde la fila actual hasta la última fila.Nota: Esta consulta asume que los valores de
row_num
son continuos y comienzan desde 1. Si este no es el caso, es posible que deba modificar la consulta en consecuencia.