Este PL te recibe como parametro el mes y el concepto que tengas.
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION suma_agregada(concepto_id VARCHAR2,mes_columna NUMBER) RETURN NUMBER IS
TYPE rec IS record(
saldo_inicial NUMBER,
enero NUMBER,
febrero NUMBER,
marzo NUMBER,
abril NUMBER,
mayo NUMBER,
junio NUMBER,
julio NUMBER,
agosto NUMBER,
septiembre NUMBER,
octubre NUMBER,
noviembre NUMBER,
diciembre NUMBER
);
TYPE tabla IS TABLE OF NUMBER INDEX BY BINARY_INTEGER ;
rec_var rec;
suma_agrupada NUMBER := 0;
v_saldo_inicial NUMBER;
valores tabla;
BEGIN
SELECT saldo_inicial,enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre
INTO rec_var
FROM meses WHERE concepto = concepto_id;
v_saldo_inicial := rec_var.saldo_inicial;
valores(1) := rec_var.enero;
valores(2) := rec_var.febrero;
valores(3) := rec_var.marzo;
valores(4) := rec_var.abril;
valores(5) := rec_var.mayo;
valores(6) := rec_var.junio;
valores(7) := rec_var.julio;
valores(8) := rec_var.agosto;
valores(9) := rec_var.septiembre;
valores(10) := rec_var.octubre;
valores(11) := rec_var.noviembre;
valores(12) := rec_var.diciembre;
suma_agrupada := v_saldo_inicial;
FOR i IN REVERSE 1..mes_columna loop
suma_agrupada := suma_agrupada + valores(i);
END LOOP;
RETURN suma_agrupada;
END;
/
Para usarlo sería así:
Código SQL:
Ver originalSELECT
concepto,
suma_agregada(concepto,1) enero,
suma_agregada(concepto,2) febrero,
suma_agregada(concepto,3) marzo
FROM meses;
Los meses que quieras.
Saludos