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 03-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
Unhappy Ayuda con SQL y 3 Tablas

Holas amigos...
Tengo una duda existencial, pero facil para uds.
tengo 3 entidades:

PROMOCION (id,nombre,dinero,puntos)
CLIENTE (id,nombre,telefono)
COMPRA (id,idcliente,idpromo,fecha,monto)

Un comercio tiene varias promociones para sus clientes. En cada promocion ofrece X puntos por cada XX $ que el cliente compra.

El listado de cada tabla seria mas o menos

PROMOCION
1 PROMO1 100 10
2 PROMO2 50 1

CLIENTE
1 PEPE 232323
2 RAUL 222737
3 IGNACIO 3894394

COMPRA
1 2 1 25/3 $145,80
2 3 1 25/3 $145,80
3 2 2 26/3 $145,80
4 2 1 28/3 $145,80
5 1 2 29/3 $145,80

**************

Mi problema ahora es:
que consulta SQL puedo hacer para:

- Listar de esta forma ?

RESUMEN
NOMBRE | MONTOCOMPRADO | PUNTOS
PEPE XXX $ QQQ
RAUL XXX $ QQQ
IGNACIO XXX $ QQQ

Es decir, necesito hacer todo esto en un sql:

- Listar todos los clientes, cada uno con el monto total de compras que hizo

- A su vez, calcular cuantos puntos le corresponden en total, por cada promocion en la que participo (compro)...

Alguien tiene idea de como hacerlo ?
No se por donde empezar

Gracias
Responder Con Cita
  #2  
Antiguo 03-05-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Así, al vuelo, creo que quedaría :

Código SQL [-]
SELECT CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.dinero * P.puntos) AS Puntos
FROM Compra C
INNER JOIN Cliente CL ON CL.id=C.idcliente
LEFT JOIN Promocion P ON P.id=C.idpromo
GROUP BY CL.nombre
ORDER BY CL.nombre

Pongo LEFT JOIN Promocion por si existe alguna venta que no tiene promoción. Así el TOTAL los es de todas las compras, tengan o no promoción.

Si necesitaras que el listado salga separando promociones :
Código SQL [-]
SELECT CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.dinero * P.puntos) AS Puntos, P.nombre AS Promo
FROM Compra 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
Por tanto TOTAL lo será de cada promoción, excluyendo las compras hechas sin promoción.

Bueno, sin poder compilarlo es todo lo que puedo hacer no te aseguro que funcione, pero los tiros van por ahí.

Saludos y suerte.

Última edición por fly fecha: 03-05-2005 a las 01:56:14.
Responder Con Cita
  #3  
Antiguo 03-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
Hola fly
Mil gracias por la ayuda...

La 1º consulta funciono de maravillas !!! eres un maestro !
pero la 2º consulta me ha dado el siguiente error:

SELECT CL.nombre AS Cliente, SUM(C.monto) AS Total, SUM(C.monto / P.dinero * P.puntos) AS Puntos, P.nombre AS Promo
FROM Compra 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

Error: P.nombre AS Promo must appear before aggregate columns in the selection list [no error code]

y luego la puse asi, tal cual dice el error, y funciono...

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

DE MARAVILLAS !!

Millon de gracias man !!
Responder Con Cita
  #4  
Antiguo 03-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
por cierto fly
tu usas algun constructor de consultas ? osea, alguna herramienta que te ayude ? o sabes de algo que me pueda servir para este proposito ? y que soporte consultas "complejas" de este tipo con varios join, etc. ?
Solo necesito una herramienta q me ayude a construir estas sentencias SQL para no estar preguntando y preguntando y molestando

Responder Con Cita
  #5  
Antiguo 03-05-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Nada tranquilo, no necesitas ninguna herramienta en absoluto.
Estas sentencias son "sencillas" en el fondo, y además creo que es mejor crearlas uno mismo, es cuestión de practica; al principio puede que salgan largas y poco optimizadas, pero con el tiempo se aprende a sacarle todo el partido (o por lo menos a que hagan el trabajo).

Yo estoy aprendiendo a los pocos, empecé con un tuto que creo que es para tablas access y ahora a los pocos voy incorporando las novedades del fb 1.5

Si quieres algún tuto te lo puedo pasar, pero en internet hay de todos los gustos y colores.

Saludos y encantado de que te sirviera.

PD: No creo que molestes con tus preguntas, para eso están los foros.
Responder Con Cita
  #6  
Antiguo 03-05-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 20
hmoner Va por buen camino
si tienes algun tutorial bueno bueno, que me sirva para aprender un 50% de lo q sabes tu, con eso me conformo
gracias master !
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 23:22:05.


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