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 consulta | Se complicó el tema (https://www.clubdelphi.com/foros/showthread.php?t=21062)

hmoner 05-05-2005 02:19:50

Ayuda con consulta | Se complicó el tema
 
:o 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 ...

Crandel 05-05-2005 07:16:10

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

hermes_32 05-05-2005 11:29:31

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.

hmoner 06-05-2005 00:19:12

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... :o

:D :D

hmoner 06-05-2005 00:23:33

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

hermes_32 06-05-2005 10:22:36

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.


La franja horaria es GMT +2. Ahora son las 18:38: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