Ver Mensaje Individual
  #4  
Antiguo 30-04-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Reputación: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
        /*Acumula los totales de cada mes*/
        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
  /*Devuelve ultimo registro con los totales*/
  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
Responder Con Cita