Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1469 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trop dure pour moi (Requete SQL niveau 5 sur l'échelle de Richter)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trop dure pour moi (Requete SQL niveau 5 sur l'échelle de Richter)

n°981676
djedjedja
Posté le 14-02-2005 à 22:42:11  profilanswer
 

Voila je souhaite faire un datareport en vb mais c'est la requete SQL qui coince.
 
Les tables
 
J'utilise 3 tables : cd, emprunt, client.
La table CD a : numcd, nomcd, nbexemplaire, datesortie, prix_location.
La table Emprunt a : numemprunt, dateemprunt, numclt.
La table client a : numclt, nomclt, prenomclt, adrclt.
 
Les relations (dsl c a chier)
entre cd et emprunt on a : cd <=> 0,n <=>emprunter<=> 1,n <=> emprunt
entre emprunt et client on a : emprunt <=> 1,1 <=> passer <=>1,n<=>clien
 
On ne peut pas emprunter 2 même cd(même numéro cd, même nom) dans un même emprunt.
 
la requete
Je souhaiterai avoir le nom et prenom des clients avec le nombre d'emprunt qu'ils ont effectué (au total) et le montant de tous leurs emprunts.
 
J'espère être clair si c'est pas le cas, hurler contre moi et demander des précisions !!
 
Merci au boss du SQL qui va me trouvé ca et bonne chance  :na: !!

mood
Publicité
Posté le 14-02-2005 à 22:42:11  profilanswer
 

n°981692
sonikbuzz
echo &#034;Hello World!&#034;;
Posté le 14-02-2005 à 22:54:26  profilanswer
 

salut,
 
c pas si compliqué que ca :
deja commence par ajouter les colonnes numcd et numclt dans Emprunt. ca va etre plus facile  ;)
 
[edit] heu c pas moi le boss SQL [/edit]


Message édité par sonikbuzz le 14-02-2005 à 22:55:22
n°981695
djedjedja
Posté le 14-02-2005 à 22:58:29  profilanswer
 

numclt est deja dedans et suivant les cardinalités tu peu pa avoir numcd dans emprunt. Et j'ai besoin d'une base en troisieme forme normale, c'est pour le boulot !!

n°981714
dividee
Posté le 14-02-2005 à 23:19:07  profilanswer
 

Il faut rajouter une table intermédiaire entre CD et Emprunt, qui correspond à ta relation "emprunter", et qui contient l'identifiant de la relation, càd "numcd" et "numemprunt".


Message édité par dividee le 14-02-2005 à 23:19:27
n°981716
djedjedja
Posté le 14-02-2005 à 23:20:36  profilanswer
 

ah oui pardon je l'avais oublié elle existe dejà !! Mais c'est la requete qui ramène beaucoup de truc de partout je suis embrouillé, j'y arrive plus !!

n°981727
dividee
Posté le 14-02-2005 à 23:32:14  profilanswer
 

un truc genre:


select
    cl.nomclt, cl.prenomclt, count(*) as nbr_emprunt, sum(prix_location) as montant_total
from client cl
    inner join emprunt e on cl.numclt = e.numclt
    inner join cd_emprunt cde on e.numemprunt = cde.numemprunt
    inner join cd on cde.numcd = cd.numcd
group by
    cl.numclt


 
J'ai pas testé mais ça doit ressembler à ça (faut peut-être rajouter des champs dans la clause 'group by' suivant le SGBD). En gros, tu joins toutes tes tables, tu regroupes par client, et tu aggrèges ce qu'il faut.
edit: qqes typos


Message édité par dividee le 14-02-2005 à 23:37:49
n°981737
djedjedja
Posté le 14-02-2005 à 23:39:57  profilanswer
 

j'essairai demain là jvai aller me coucher !! :D

n°981739
dividee
Posté le 14-02-2005 à 23:41:31  profilanswer
 

le nbr_emprunt ce serait plutôt

count(distinct e.numemprunt)

sinon ça donne le nombre de CD empruntés, pas le nombre d'emprunt...

n°982706
djedjedja
Posté le 15-02-2005 à 20:11:48  profilanswer
 

ca a pas lair de marcher !! et au passage inner join jai jamais vu !!

n°982771
moi23372
Posté le 15-02-2005 à 21:31:13  profilanswer
 

tout dépend de l'SGBD que tu utilises
tu peux faire ça différemment bien sure...
 
 
select client.nomclt, client.prenomclt, count(DISTINCT *) as nbr_emprunt, sum(prix_location) as montant_total  
from client, emprunt, cd_emprunt, cd  
where client.numclt = emprunt.numclt  
AND emprunt.numemprunt = cd_emprunt.numemprunt  
AND cd_emprun.numcd = cd.numcd  
group by client.numclt  

mood
Publicité
Posté le 15-02-2005 à 21:31:13  profilanswer
 

n°982788
djedjedja
Posté le 15-02-2005 à 21:41:24  profilanswer
 

jvai tenter ca cette requete !!
Pour les prochains (si jamais ca marche pas), la base de données est sous access!

n°982817
djedjedja
Posté le 15-02-2005 à 22:03:05  profilanswer
 

pourquoi je m'échine sur ce truc j'ai l'impression qu'on parle pas le meme langage !!

n°983960
moi23372
Posté le 16-02-2005 à 20:37:04  profilanswer
 

cmt ça?

n°984757
djedjedja
Posté le 17-02-2005 à 12:14:06  profilanswer
 

bah tout simplement ca marche pas !! et ca ménerve !! il comprend que les "select *" basique dès qu'on lui met plus de trucs il panique et ne marche plus

n°985400
dividee
Posté le 17-02-2005 à 21:27:52  profilanswer
 

Access accepte parfaitement la syntaxe 'inner join' (avec qqes parenthèses en plus), mais par contre le count(distinct ...) il ne connait pas.
Ceci fonctionne (j'ai testé):


select  
    cl.nomclt, cl.prenomclt, ee.nbr_emprunt, sum(prix_location) as montant_total  
from (((client cl  
    inner join emprunt e on cl.numclt = e.numclt)
    inner join cd_emprunt cde on e.numemprunt = cde.numemprunt)
    inner join cd on cde.numcd = cd.numcd)
    inner join (select numclt, count(*) as nbr_emprunt from emprunt group by numclt) ee on ee.numclt = cl.numclt
group by  
    cl.numclt, cl.nomclt, cl.prenomclt, ee.nbr_emprunt


C'est le moyen le plus simple que j'ai trouvé, mais qq'un d'autre trouvera peut-être une solution encore plus simple.

n°997569
djedjedja
Posté le 01-03-2005 à 21:24:26  profilanswer
 

merci dividee pour le inner join meme si ca va etre dur a expliquer pour mon projet
par contre jai un dernier petit souci comment on met le [Résolu] sur le titre ?? :P

n°997954
Beegee
Posté le 02-03-2005 à 10:37:32  profilanswer
 

faut éditer le premier message :)
http://forum-images.hardware.fr/themes_static/images/defaut/edit.gif


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trop dure pour moi (Requete SQL niveau 5 sur l'échelle de Richter)

 

Sujets relatifs
[Requet SQL] Avec des dates....Comment migrer une base de SQL Server 2000 vers MySQL???
[SQL Server] base de données réparties, comment faire ?Requete SQL
probleme de classement d une requeteRequête avec COUNT ?
Logiciels gratuits pour bases de données SQLVB6 + SQL
probleme de test sur une valeur sortie d'une requete SQL 
Plus de sujets relatifs à : Trop dure pour moi (Requete SQL niveau 5 sur l'échelle de Richter)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR