Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con esta consulta¡¡¡¡¡ (https://www.clubdelphi.com/foros/showthread.php?t=67640)

Poke 27-04-2010 22:24:37

Ayuda con esta consulta¡¡¡¡¡
 
Hola a todos, quiero realizar la siguiente consulta, trabajo con firebird 2.1 y Delphi 7: tengo una tabla llamada registro y necesito que me sume todos los registros de cargo en el año y me clasifique por mes he buscado en el foro encontré que se puede hacer contrasform y pivot, pero en firebird no existe esas funciones.
tabla Apuntes:

Código Delphi [-]
Código    Categoría         Codcate    fecha             Cargo    abono [/b]  
0001      Alimentacion          2      01/02/2010         3.65       0

Y lo que quiero es que me salga más o menos así:

Código Delphi [-]
Categoria            Enero,2010         febrero, 2010 ……     diciembre, 2010 
Alimentación             0                  3.65                   0


He buscado en los foros y me dan la opción de utilizar la cláusula case en firebird pero la verdad no tengo idea de cómo hacerlo, son novato en esto cualquier sugerencia es bienvenida desde ya gracias.:o

cloayza 28-04-2010 00:37:56

Amigo podria ser algo asi...

Código SQL [-]
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
FROM registro
WHERE EXTRACT(year from fecha)=2010
GROUP BY categoria

Saludos

Poke 29-04-2010 22:59:45

Hola perdón por no responder es que estaba ocupado… excelente funciono correctamente gracias por tu ayuda cloayza
Mira ahora quisiera saber si puedo sacar el total de cada mes y total en el año mas o menos de esta forma:


Código Delphi [-]
Categoria            Enero,2010         febrero, 2010 ……    diciembre, 2010       total
Alimentación          0                        3.65                   0         3.65
internet                4.25                    2.00                   0         6.25

TOTAL                  4.25                    5.65                   0         8.90

Perdonen mi ignorancia he tratado de hacerlo pero no hay manera… creo que me falta mucho para aprender a realizar consultas… de este tipo desde ya gracias :D:(;)

cloayza 30-04-2010 16:52:29

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,
         :DICIEMBRE,
         :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

Poke 02-05-2010 17:25:37

Hoooooooo:eek:o gracias cloayza … funciona perfectamente.. eres un maestro.. sabes esto de los procedures lo havia escuchado pero no sabía como funciona.:rolleyes:. y mucho menos crear uno.. lo he realizado como tu planteas y funciona perfectamente gracias hee.. voy a ver si busco manuales o algo sobre esto porque son de mucha utilidad y a ver si algún día manejo esto de las consultas y procedures como tu cloayza ….

Gracias de nuevo y que la pases biennn……;)

itsspxndx 04-07-2016 20:32:33

Agrupar por Categoria
 
quisiera aprovechar este post, ya que requiero la misma consulta, tal cual como esta. Solo que en este caso, quisiera totalisarlo por categoría.
Mi consulta en la parte de "categoria" pasa a ser "Grupo de clientes", como puedo totalisarlo por grupo de clientes?, por favor si serian tan amable, ya llevo dias tratando de solucionarlo y soy algo novato en esto. gracias.


La franja horaria es GMT +2. Ahora son las 22:56:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi