PDA

Ver la Versión Completa : Ayuda con consulta | Se complicó el tema


hmoner
05-05-2005, 02:19:50
: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:

http://img126.echo.cx/img126/3357/estructurafp20053gh.jpg

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


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:


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