Computación secuencial del valor a través de las columnas
Dado los valores como se muestra a continuación:
## Nombre init mes1 mes2 mes3 cal1 cal2 cal3
Andy 2.2 1.3 2.5 1.5
Brian 1.8 2.1 1.2 0.8
Cindy 1.5 3.3 3.1 2.2
Quiero usar una sola declaración de SQL para completar las columnas “cal” con la fórmula a continuación:
cal1 = init – mes1
cal2 = init – mes1 – mes2
cal3 = init – mes1 – mes2 – mes3
…
…
cal24 = init – mes1 – mes2 … mes24
Entonces el resultado será el siguiente:
## Nombre init mes1 mes2 mes3 cal1 cal2 cal3
Andy 2.2 1.3 2.5 1.5 0.9 -1.2 -2.7
Brian 1.8 2.1 1.2 0.8 -0.3 -1.5 -2.3
Cindy 1.5 3.3 3.1 2.2 -1.8 -4.9 -7.1
Utilizo una forma muy simple para lograr el objetivo:
SELECT a.*
, a.init - mes1 as cal1
, a.init - mes1 - mes2 as cal2
, a.init - mes1 - mes2 - mes3 as cal3
FROM tabla_temporal a
¿Existe una forma más elegante para lograr lo que quiero?
davy.ai
Sí, una manera más elegante de obtener el resultado deseado es utilizando una declaración CASE con múltiples condiciones en la cláusula SELECT. Aquí tienes un ejemplo de consulta que logra el mismo resultado:
Esta consulta utiliza la declaración CASE para verificar si cada columna de mes no es NULL y, de ser así, calcula el valor correspondiente de la columna cal. Si la columna de mes es NULL, entonces el valor de la columna cal también se establece como NULL. Este enfoque es más elegante porque elimina la necesidad de escribir expresiones separadas para cada columna cal, y también resulta en un código más limpio y legible.