Para lo que necesitas, te he creado un procedimiento almacenado
el cual te entregara los datos como lo requieres...
Para obtener los datos puedes hacer lo siguiente:
Código SQL
[-]SELECT * FROM CATEGORIA_TOTALES(QUE_ANO)
Ejmp:
Código SQL
[-]SELECT * FROM CATEGORIA_TOTALES(2010)
Procedimiento Almacenado: Debes crear este procedimiento en tu Base de datos...
Código SQL
[-]CREATE PROCEDURE CATEGORIA_TOTALES (
QUE_ANO INTEGER)
RETURNS (
CATEGORIA VARCHAR(30),
ENERO DOUBLE PRECISION,
FEBRERO DOUBLE PRECISION,
MARZO DOUBLE PRECISION,
ABRIL DOUBLE PRECISION,
MAYO DOUBLE PRECISION,
JUNIO DOUBLE PRECISION,
JULIO DOUBLE PRECISION,
AGOSTO DOUBLE PRECISION,
SEPTIEMBRE DOUBLE PRECISION,
OCTUBRE DOUBLE PRECISION,
NOVIEMBRE DOUBLE PRECISION,
DICIEMBRE DOUBLE PRECISION,
TOTAL DOUBLE PRECISION)
AS
DECLARE VARIABLE TENERO FLOAT = 0;
DECLARE VARIABLE TFEBRERO FLOAT = 0;
DECLARE VARIABLE TMARZO FLOAT = 0;
DECLARE VARIABLE TABRIL FLOAT = 0;
DECLARE VARIABLE TMAYO FLOAT = 0;
DECLARE VARIABLE TJUNIO FLOAT = 0;
DECLARE VARIABLE TJULIO FLOAT = 0;
DECLARE VARIABLE TAGOSTO FLOAT = 0;
DECLARE VARIABLE TSEPTIEMBRE FLOAT = 0;
DECLARE VARIABLE TOCTUBRE FLOAT = 0;
DECLARE VARIABLE TNOVIEMBRE FLOAT = 0;
DECLARE VARIABLE TDICIEMBRE FLOAT = 0;
DECLARE VARIABLE TTOTAL FLOAT = 0;
BEGIN
FOR
SELECT Categoria,
SUM( Case extract(month from fecha) when 1 then cargo else 0 end) as enero,
SUM( Case extract(month from fecha) when 2 then cargo else 0 end) as febrero,
SUM( Case extract(month from fecha) when 3 then cargo else 0 end) as marzo,
SUM( Case extract(month from fecha) when 4 then cargo else 0 end) as abril,
SUM( Case extract(month from fecha) when 5 then cargo else 0 end) as mayo,
SUM( Case extract(month from fecha) when 6 then cargo else 0 end) as junio,
SUM( Case extract(month from fecha) when 7 then cargo else 0 end) as julio,
SUM( Case extract(month from fecha) when 8 then cargo else 0 end) as agosto,
SUM( Case extract(month from fecha) when 9 then cargo else 0 end) as septiembre,
SUM( Case extract(month from fecha) when 10 then cargo else 0 end) as octubre,
SUM( Case extract(month from fecha) when 11 then cargo else 0 end) as noviembre,
SUM( Case extract(month from fecha) when 12 then cargo else 0 end) as diciembre,
SUM(Cargo) as Total
FROM Registro
WHERE EXTRACT(year from fecha)=:QUE_ANO
GROUP BY Categoria
INTO :CATEGORIA,
:ENERO,
:FEBRERO,
:MARZO,
:ABRIL,
:MAYO,
:JUNIO,
:JULIO,
:AGOSTO,
:SEPTIEMBRE,
:OCTUBRE,
:NOVIEMBRE,
ICIEMBRE,
:TOTAL
DO
BEGIN
TENERO = TENERO + ENERO;
TFEBRERO = TFEBRERO + FEBRERO;
TMARZO = TMARZO + MARZO;
TABRIL = TABRIL + ABRIL;
TMAYO = TMAYO + MAYO;
TJUNIO = TJUNIO + JUNIO;
TJULIO = TJULIO + JULIO;
TAGOSTO = TAGOSTO + AGOSTO;
TSEPTIEMBRE= TSEPTIEMBRE+ SEPTIEMBRE;
TOCTUBRE = TOCTUBRE + OCTUBRE;
TNOVIEMBRE = TNOVIEMBRE + NOVIEMBRE;
TDICIEMBRE = TDICIEMBRE + DICIEMBRE;
TTOTAL = TTOTAL + TOTAL;
SUSPEND;
END
CATEGORIA='TOTAL';
ENERO = TENERO ;
FEBRERO = TFEBRERO;
MARZO = TMARZO;
ABRIL = TABRIL;
MAYO = TMAYO;
JUNIO = TJUNIO;
JULIO = TJULIO ;
AGOSTO = TAGOSTO;
SEPTIEMBRE= TSEPTIEMBRE;
OCTUBRE = TOCTUBRE;
NOVIEMBRE = TNOVIEMBRE;
DICIEMBRE= TDICIEMBRE;
TOTAL = TTOTAL;
SUSPEND;
END
Espero te sirva
Saludos