Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2010
Poke Poke is offline
Miembro
 
Registrado: dic 2005
Ubicación: Madrid
Posts: 27
Poder: 0
Poke Va por buen camino
Red face 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.
__________________
¡Caer está permitido. Levantarse es obligatorio!.
Responder Con Cita
  #2  
Antiguo 28-04-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
  #3  
Antiguo 29-04-2010
Poke Poke is offline
Miembro
 
Registrado: dic 2005
Ubicación: Madrid
Posts: 27
Poder: 0
Poke Va por buen camino
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
__________________
¡Caer está permitido. Levantarse es obligatorio!.

Última edición por Poke fecha: 29-04-2010 a las 23:04:06.
Responder Con Cita
  #4  
Antiguo 30-04-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
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
  #5  
Antiguo 02-05-2010
Poke Poke is offline
Miembro
 
Registrado: dic 2005
Ubicación: Madrid
Posts: 27
Poder: 0
Poke Va por buen camino
Hooooooooo gracias cloayza … funciona perfectamente.. eres un maestro.. sabes esto de los procedures lo havia escuchado pero no sabía como funciona.. 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……
__________________
¡Caer está permitido. Levantarse es obligatorio!.
Responder Con Cita
  #6  
Antiguo 04-07-2016
itsspxndx itsspxndx is offline
Registrado
NULL
 
Registrado: jul 2016
Posts: 6
Poder: 0
itsspxndx Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No me sale esta consulta ¿Por que? rgstuamigo MySQL 3 02-02-2009 19:47:16
Está bien esta consulta Select count? enecumene MySQL 12 30-08-2007 03:54:29
Q tiene esta consulta ? Ryu SQL 4 26-04-2005 18:37:16
Que hace esta consulta agonzalez SQL 0 12-02-2004 20:30:29
Ayuda con esta consulta? danytorres SQL 1 10-10-2003 20:29:15


La franja horaria es GMT +2. Ahora son las 00:10:05.


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