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
  #21  
Antiguo 23-03-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Prueba con esto

Código SQL [-]
select 
       sum(case day(fecha) when 1 then Kgs else 0 end) '1',
       sum(case day(fecha) when 2 then Kgs else 0 end) '2',  
       sum(case day(fecha) when 3 then Kgs else 0 end) '3',
       sum(case day(fecha) when 4 then Kgs else 0 end) '4',
       sum(case day(fecha) when 5 then Kgs else 0 end) '5',
       sum(case day(fecha) when 6 then Kgs else 0 end) '6',
       sum(case day(fecha) when 7 then Kgs else 0 end) '7',
       sum(case day(fecha) when 8 then Kgs else 0 end) '8',
       sum(case day(fecha) when 9 then Kgs else 0 end) '9',
       sum(case day(fecha) when 10 then Kgs else 0 end) '10',
       sum(case day(fecha) when 11 then Kgs else 0 end) '11',
       sum(case day(fecha) when 12 then Kgs else 0 end) '12',
       sum(case day(fecha) when 13 then Kgs else 0 end) '13',
       sum(case day(fecha) when 14 then Kgs else 0 end) '14',
       sum(case day(fecha) when 15 then Kgs else 0 end) '15',
       sum(case day(fecha) when 16 then Kgs else 0 end) '16',
       sum(case day(fecha) when 17 then Kgs else 0 end) '17',
       sum(case day(fecha) when 18 then Kgs else 0 end) '18',
       sum(case day(fecha) when 19 then Kgs else 0 end) '19',
       sum(case day(fecha) when 20 then Kgs else 0 end) '20',
       sum(case day(fecha) when 21 then Kgs else 0 end) '21',
       sum(case day(fecha) when 22 then Kgs else 0 end) '22',
       sum(case day(fecha) when 23 then Kgs else 0 end) '23',
       sum(case day(fecha) when 24 then Kgs else 0 end) '24',
       sum(case day(fecha) when 25 then Kgs else 0 end) '25',
       sum(case day(fecha) when 26 then Kgs else 0 end) '26',
       sum(case day(fecha) when 27 then Kgs else 0 end) '27',
       sum(case day(fecha) when 28 then Kgs else 0 end) '28',
       sum(case day(fecha) when 29 then Kgs else 0 end) '29',
       sum(case day(fecha) when 30 then Kgs else 0 end) '30',
       sum(case day(fecha) when 31 then Kgs else 0 end) '31',
       sum(Kgs) Total
 from Recepcion me 
RIGHT JOIN dIAS ON me.fecha=dias.fecha

 where fecha between '20110101' and '20110131'

De todas maneras, antes de hacer nada, comprueba tal como te han dicho los compañeros que las joins te dan la información que quieres.
Es decir, un left join o un right join dependiendo de dónde pongas la tabla de días, deberá darte al menos un registro de cada día. Si en la tabla de datos no hay registros, el valor que sumas deberá ser nulo.

haz esto:
Código SQL [-]
select D.Fecha, R.kgs 
from Dias D 
LEFT JOIN REcepcion R ON D.fecha=R.fecha
debe ofrecerte al menos un registro por día, tal como comentaba. A partir de aquí pones el group by , y luego formateas en filas o columnas tal y como ta han comentado.

Nos cuentas.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #22  
Antiguo 23-03-2011
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Creo que no me he explicado bien sobre los JOIN.
Yo sé como funcionan los diferentes tipos de JOIN, llevo mucho tiempo usándolos, pero en esta ocasión y por algún motivo, no funcionan adecuadamente.

Pongo un ejemplo
Tengo la siguiente tabla de Recepción

Código:
Dia            Kgs
01/01/2010.....10
01/01/2010.....20
04/01/2010.....50
Quiero hacer un informe resumen de las entradas diarias, y en este ejemplo debería ser


Código:
Dia               Kgs
1                   30
2                    0
3                    0
4                   50
Me he creado una tabla auxiliar DIAS, con los dias del 1 al 31

Y hago la siguiente consulta

Código SQL [-]select d.dia, rm.suma from dias d left join (select extract(day from fecha) as dia, sum(kgs) as suma from Recepcion where ano = 2010 group by dia ) as rm on d.iddia = rm.dia


Y el resultado es


Código:
Dia               Kgs
1                   30
4                   50
En lugar de


Código:
Dia               Kgs
1                   30
2                    0
3                    0
4                   50
Por esto digo que el LEFT JOIN no está funcionando bien, o hay algo que se me escapa y que os agradecería me ayudarais a resolver

Un saludo
Responder Con Cita
  #23  
Antiguo 23-03-2011
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
En las respuestas que me habeis dado, la solución de gluglu es mejor que la mia.

Yo creo una tabla auxiliar DIAS con 31 dias, pero de esta forma supongo que todos los meses tienen 31 días.
Sin embargo, gluglu con su
PROCEDURE AUTO_INC_DATE

va avanzado dia a dia real, de esta forma tiene en cuenta los días reales de cada mes, e incluso los años bisiestos

Lo usaré
Responder Con Cita
  #24  
Antiguo 23-03-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Me alegro que te sirva !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #25  
Antiguo 23-03-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Yo tengo Firebird 2.1 instalado también.

He creado una tabla Días, y otra tabla Recepción. He ejecutado tu consulta que indicas arriba, y a mí me devuelve registros en NULL para todos aquellos días en los que no ha habido recepción de mercancías.
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 23-03-2011 a las 17:20:59.
Responder Con Cita
  #26  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
[quote=PacoPepe;394347]
Código SQL [-]
 
select d.dia, rm.suma from dias d left join (select extract(day from fecha) as dia, sum(kgs) as suma from Recepcion where ano = 2010 group by dia ) as rm on d.iddia = rm.dia
esta consulta la hice de esta manera y si me sale como tu quieres

Código SQL [-]
 
select d.dia, rm.suma from dias d left join (select dia, sum(kilos) as suma from consumo where anio = '2011' group by dia ) as rm on d.dia = rm.dia
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #27  
Antiguo 24-03-2011
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Question

Me podeis enviar la bbdd que habeis hecho

Gracias
Responder Con Cita
  #28  
Antiguo 24-03-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Código SQL [-]
CREATE TABLE DIAS (
    DIA INTEGER);

INSERT INTO DIAS (DIA)
          VALUES (1);
INSERT INTO DIAS (DIA)
          VALUES (2);
INSERT INTO DIAS (DIA)
          VALUES (3);
INSERT INTO DIAS (DIA)
          VALUES (4);
INSERT INTO DIAS (DIA)
          VALUES (5);
INSERT INTO DIAS (DIA)
          VALUES (6);
INSERT INTO DIAS (DIA)
          VALUES (7);
INSERT INTO DIAS (DIA)
          VALUES (8);
INSERT INTO DIAS (DIA)
          VALUES (9);
INSERT INTO DIAS (DIA)
          VALUES (10);
COMMIT WORK;

CREATE TABLE RECEPCION (
    FECHA DATE,
    KGS INTEGER);
 
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-01', 1);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-01', 1);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-02', 3);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-04', 4);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-04', 4);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-06', 6);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-06', 6);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-08', 8);
INSERT INTO RECEPCION (FECHA, KGS)
               VALUES ('2011-01-09', 9);
COMMIT WORK;

Aplico :
Código Delphi [-]
Select D.DIA, RM.SUMA from Dias D
left join (Select extract(day from fecha) as dia,
                  sum(kgs) as suma
           from Recepcion
           group by dia ) as RM
  on D.DIA = RM.DIA

y el resultado que obtengo es :
Código SQL [-]
DIA SUMA
  1    2
  2    3
  3    Null
  4    8
  5    Null
  6    12
  7    Null
  8    8
  9    9
 10    Null
__________________
Piensa siempre en positivo !
Responder Con Cita
  #29  
Antiguo 24-03-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Yo creo que es porque estás haciendo mal la join. No sé porqué metes otra select.

Prueba esto. Debes tener la tabla días con 31 registros.
Código SQL [-]
Select D.DIA, sum(R.Kgs) from Dias D
left join Recepcion R on D.dia=extract(day from R.fecha)

group by D.dia

Luego nos comentas.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #30  
Antiguo 25-03-2011
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 114
Poder: 20
elguille Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Yo creo que es porque estás haciendo mal la join. No sé porqué metes otra select.

Prueba esto. Debes tener la tabla días con 31 registros.
Código SQL [-]Select D.DIA, sum(R.Kgs) as sumakilos from Dias D left join Recepcion R on D.dia=extract(day from R.fecha) group by D.dia


Luego nos comentas.

Saludos
Falta el mes y año

Select D.DIA, sum(R.Kgs) from Dias D
left join Recepcion R on D.dia=extract(day from R.fecha)
where extract(month from R.fecha)=el_mes and extract(year from R.fecha)=el_año
group by D.dia

Lo siento pero al editar el post no consigo que se vea como sentencia SQL

Última edición por elguille fecha: 25-03-2011 a las 08:04:27.
Responder Con Cita
  #31  
Antiguo 25-03-2011
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Muchas gracias gluglu, por fin funciona

Os agradezco a todos los que me habeis respondido vuestro interés por resolverme el problema

Un saludo a todos
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
Resumen de Información PallyRS Impresión 2 10-03-2009 15:05:09
Resumen Abuelo7 Conexión con bases de datos 18 03-10-2008 11:27:45
Distribución de ventas mensual DarkDudae Varios 0 31-08-2006 14:30:14
Consulta resumen con subconsulta(ayuda) cmena SQL 5 01-07-2004 00:18:21
Consulta Mensual en semanas el_enigma1 SQL 5 17-05-2004 15:43:59


La franja horaria es GMT +2. Ahora son las 11:42:45.


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