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 07-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jooooseph Ver Mensaje
claro esta que el 2012 debera ser ingresado como variable.
Cierto. En la consulta que puse habría que añadir una condición WHERE para el año. La consulta que pones puede servir, pero el problem es que las subconsultas siempre son más lentas.

// Saludos
Responder Con Cita
  #2  
Antiguo 07-09-2012
Avatar de jooooseph
jooooseph jooooseph is offline
Miembro
 
Registrado: oct 2007
Posts: 50
Poder: 17
jooooseph Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Cierto. En la consulta que puse habría que añadir una condición WHERE para el año. La consulta que pones puede servir, pero el problem es que las subconsultas siempre son más lentas.

// Saludos
En difinitiva. He probado tu tipo de consulta y me parece mas efectivo, el unico problema es que en mi reporte no solo quiero que aparezca solo aquellas personas que han hecho algun tipo de ingreso, sino aquellas que derrepente no han hecho ningun ingreso. Es por ello la consulta o el join con dos tablas..... Pero el tuyo me parece genial, que lo voy a usar para otro tipo de reporte . Gracias por la colaboracion.
Responder Con Cita
  #3  
Antiguo 07-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jooooseph Ver Mensaje
el unico problema es que en mi reporte no solo quiero que aparezca solo aquellas personas que han hecho algun tipo de ingreso, sino aquellas que derrepente no han hecho ningun ingreso.
Creo que eso puede arreglarse sin recurrir a las subconsultas:

Código SQL [-]
select
  clientes.nombre,
  sum(if(extract(month from fecha) = 1, monto, 0)) as enero,
  sum(if(extract(month from fecha) = 2, monto, 0)) as febrero,
  ...
  sum(if(extract(month from fecha) = 12, monto, 0)) as diciembre
from clientes
left join ingresos on clientes.nombre = ingresos.nombre
where extract(year from fecha) = 2012
group by nombre

// Saludos

Última edición por roman fecha: 07-09-2012 a las 20:23:58.
Responder Con Cita
  #4  
Antiguo 07-09-2012
Avatar de jooooseph
jooooseph jooooseph is offline
Miembro
 
Registrado: oct 2007
Posts: 50
Poder: 17
jooooseph Va por buen camino
BUENO.... Casi va por la respuesta, en el casi de mi ejemplo solo con 3 clientes funciona por los ingresos que he realizado, pero si hubiera un cuarto cliente "Betty" el cual no hubiera realizado ningun ingreso, cuando haga la consulta anual este cuarto cliente no me va a figurar en el reporte. y lo que necesito es que me figure.

con tu consulta seria asi

Cita:
Nombre ... | Enero | Febrero | Marzo | ...... hasta | Diciembre
-----------+--------+---------+-------+-------------------------
Cesar .... | 100.00 | 20.00 | 0.00 | ...... 0.00
Juan .... | 200.00 | 0.00 | 0.00 | ...... 0.00
Pedro .... | 100.00 | 0.00 | 0.00 | ...... 0.00
Y lo que yo necesito es

Nombre ... | Enero | Febrero | Marzo | ...... hasta | Diciembre
-----------+--------+---------+-------+-------------------------
Cesar .... | 100.00 | 20.00 | 0.00 | ...... 0.00
Betty..... | 0.00 | 0.00 | 0.00 | .......0.00
Juan .... | 200.00 | 0.00 | 0.00 | ...... 0.00
Pedro .... | 100.00 | 0.00 | 0.00 | ...... 0.00
[/quote]

Se podra hacer.
Responder Con Cita
  #5  
Antiguo 07-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jooooseph Ver Mensaje
BUENO.... Casi va por la respuesta, en el casi de mi ejemplo solo con 3 clientes funciona por los ingresos que he realizado, pero si hubiera un cuarto cliente "Betty" el cual no hubiera realizado ningun ingreso, cuando haga la consulta anual este cuarto cliente no me va a figurar en el reporte. y lo que necesito es que me figure.
Y, ¿ya lo probaste? Porque yo sí, y sí me aparece Betty (bueno, en mi caso fue maria, pero da lo mismo )

// Saludos
Responder Con Cita
  #6  
Antiguo 07-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Espera, tienes razón. Primero probé sin la condición del año y sí me aparecía maria, pero desaparece al poner el filtro. Pero prueba sustituyendo el filtro

Código SQL [-]
where extract(year from fecha) = 2012

por este otro:

Código SQL [-]
where coalesce(extract(year from fecha), 2012) = 2012

// Saludos
Responder Con Cita
  #7  
Antiguo 07-09-2012
Avatar de jooooseph
jooooseph jooooseph is offline
Miembro
 
Registrado: oct 2007
Posts: 50
Poder: 17
jooooseph Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¡Ah! Espera, tienes razón. Primero probé sin la condición del año y sí me aparecía maria, pero desaparece al poner el filtro. Pero prueba sustituyendo el filtro

Código SQL [-]where extract(year from fecha) = 2012


por este otro:

Código SQL [-]where coalesce(extract(year from fecha), 2012) = 2012


// Saludos
Gracias por la solucion.... Claro que funciona y de maravilla... . Esa es la mejor consulta.
Responder Con Cita
  #8  
Antiguo 07-09-2012
Avatar de jooooseph
jooooseph jooooseph is offline
Miembro
 
Registrado: oct 2007
Posts: 50
Poder: 17
jooooseph Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¡Ah! Espera, tienes razón. Primero probé sin la condición del año y sí me aparecía maria, pero desaparece al poner el filtro. Pero prueba sustituyendo el filtro

Código SQL [-]where extract(year from fecha) = 2012


por este otro:

Código SQL [-]where coalesce(extract(year from fecha), 2012) = 2012


// Saludos

solo una ultima ayudita.... como estaria funcionando el coalesce(extract(year from fecha), 2012) = 2012
el 2012 que esta dentro del parecntesis....
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
Reporte en PDF lucasarts_18 Varios 4 31-03-2008 19:27:23
Resumen anual del Club Delphi 2006! Héctor Randolph La Taberna 4 19-12-2006 00:19:02
Reporte carols018 Varios 4 11-12-2006 09:02:00
Encuesta Anual Delphi xander Noticias 0 30-10-2006 20:09:03
Reporte erick_jesus Conexión con bases de datos 1 31-05-2006 17:22:50


La franja horaria es GMT +2. Ahora son las 17:08:31.


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