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 05-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
Ayuda con consulta | Se complicó el tema

Holas amigos del ClubDelphi...

En este hilo: http://www.clubdelphi.com/foros/showthread.php?t=20972
Pedi ayuda acerca de como crear una consulta donde se pudiera listar la cantidad de dinero que se le habia facturado a cada cliente, y tambien la cantidad de puntos que habia ganado..

Ahora, la estructura se complica ya que:
Cada promocion "normal" puede tener 0 o mas "sub"promociones especiales.

Por lo que la estructura seria algo asi:



La consulta que listaba los puntos y monto acumulados de cada cliente era:

Código:
     SELECT P.nombre AS Promo, CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.euros * P.puntos) AS Puntos
     FROM FACTURACION C
     INNER JOIN CLIENTE CL ON CL.id=C.idcliente
     INNER JOIN PROMOCION P ON P.id=C.idpromo
     GROUP BY CL.nombre, P.nombre
     ORDER BY CL.nombre
Pero ahora...

¿ Como podria hacer para que tambien se sume la cantidad de dinero facturado y puntos acumulados por promociones especiales ?

(teniendo en cuenta que solo se deberan tomar valores pertenecientes a facturaciones por promociones especiales que pertenecen a la promocion normal seleccionada)

Se que es un lio, pero alguien con paciencia que me ayude...

Gracias ...

Última edición por hmoner fecha: 05-05-2005 a las 02:21:52.
Responder Con Cita
  #2  
Antiguo 05-05-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Me parece que te estas complicando.
Una promoción es una promoción, si la promoción se suma a una nueva promoción, definí una promoción nueva y liste.

No es SQL, pero espero que te sirva..
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 05-05-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Hola hmoner,

No si he entendido bien, pero la solución no sería del estilo:

Código Delphi [-]
SELECT P.nombre AS Promo, CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.euros * P.puntos) AS Puntos, 
(select sum(c.monto) 
 from facturacion 
 where id in (select id from promo_normal)
 and id = c.id
 and idcliente = cl.id) as Monto_ProN ...
     FROM FACTURACION C
     INNER JOIN CLIENTE CL ON CL.id=C.idcliente
     INNER JOIN PROMOCION P ON P.id=C.idpromo
     GROUP BY CL.nombre, P.nombre
     ORDER BY CL.nombre

Mas o menos creo que es eso ¿no?. Quedan calcular los puntos de la promoción normal, y el monto y puntos de promociones especiales, pero eso te lo dejo a ti

Un saludo.
Responder Con Cita
  #4  
Antiguo 06-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
Cita:
Empezado por Crandel
Me parece que te estas complicando.
Una promoción es una promoción, si la promoción se suma a una nueva promoción, definí una promoción nueva y liste.
No es SQL, pero espero que te sirva..
Lo que pasa es que dentro de UNA PROMOCION (NORMAL) pueden crearse 0 o mas SUBPROMOCIONES ESPECIALES, por ejemplo:

Promocion XXX Normal 1:
- Por cada $ 100 de compra, ganas 10 puntos

Promocion XXX Especial 1:
- Por cada $ 100 de compra, ganas 20 puntos !

Promocion XXX Especial 2:
- Por cada $ 100 de compra, ganas 30 puntos !

Y asi...

Responder Con Cita
  #5  
Antiguo 06-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
Cita:
Empezado por hermes_32
Código Delphi [-]
 SELECT P.nombre AS Promo, CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.euros * P.puntos) AS Puntos, 
 (select sum(c.monto) 
  from facturacion 
  where id in (select id from promo_normal)
  and id = c.id
  and idcliente = cl.id) as Monto_ProN ...
      FROM FACTURACION C
      INNER JOIN CLIENTE CL ON CL.id=C.idcliente
      INNER JOIN PROMOCION P ON P.id=C.idpromo
      GROUP BY CL.nombre, P.nombre
      ORDER BY CL.nombre
Hola hermes_32
Antes que nada, gracias por ayudar...
La verdad que no he entendido nada, pero dejame ver si entendi bien...

Con este codigo calculas el monto total facturado al cliente, ya sea por promociones normales y especiales ? (donde estas especiales pertenecen a la normal) ... me equivoco ?
Entonces lo que me faltaria seria calcular puntajes normales y especiales, no ?

Gracias nuevamente
Responder Con Cita
  #6  
Antiguo 06-05-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Código Delphi [-]
SELECT P.nombre AS Promo, CL.nombre AS Cliente, 
 (select sum(c1.monto) 
  from facturacion c1
  join promociones p1 on p1.id = c1.idpromo
  where c1.id = c.id
  and c1.idcliente = cl.id
  group by c1.id) as Monto_Pro,   <- total monto promociones

 (select sum(c2.monto / p2.Euros * p2.puntos) 
  from facturacion c2
  join promociones p2 on p2.id = c2.idpromo
  and c2.id = c.id
  and c2.idcliente = cl.id
  group by c2.id) as Puntos_Pro,   <- total puntos promociones

 (select sum(c3.monto) 
  from facturacion c3
  join promociones p3 on p3.id = c3.idpromo
  where c3.id = c.id
  and c3.idcliente = cl.id
  group by c3.id) as Monto_ProN,   <- total monto normales

 (select sum(c4.monto / p4.Euros * p4.puntos) 
  from facturacion c4
  join promociones p4 on p4.id = c4.idpromo
  and c4.id = c.id
  and c4.idcliente = cl.id
  group by c4.id) as Puntos_ProN,   <- total puntos normales

 (select sum(c5.monto) 
  from facturacion c5
  join promociones p5 on p5.id = c5.idpromo
  where c5.id = c.id
  and c5.idcliente = cl.id
  group by c5.id) as Monto_ProE,   <- total monto especiales

 (select sum(c6.monto / p6.Euros * p4.puntos) 
  from facturacion c6
  join promociones p6 on p6.id = c6.idpromo
  and c6.id = c.id
  and c6.idcliente = cl.id
  group by c6.id) as Puntos_ProE   <- total puntos especiales

FROM FACTURACION C
      INNER JOIN CLIENTE CL ON CL.id=C.idcliente
      GROUP BY CL.nombre
      ORDER BY CL.nombre

Prueba con esto tio. A ver si es lo que necesitas y funciona.

Un saludo.
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


La franja horaria es GMT +2. Ahora son las 20:48:50.


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