Trop dure pour moi (Requete SQL niveau 5 sur l'échelle de Richter) - SQL/NoSQL - Programmation
Marsh Posté le 14-02-2005 à 22:54:26
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]
Marsh Posté le 14-02-2005 à 22:58:29
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 !!
Marsh Posté le 14-02-2005 à 23:19:07
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".
Marsh Posté le 14-02-2005 à 23:20:36
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 !!
Marsh Posté le 14-02-2005 à 23:32:14
un truc genre:
|
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
Marsh Posté le 14-02-2005 à 23:41:31
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...
Marsh Posté le 15-02-2005 à 20:11:48
ca a pas lair de marcher !! et au passage inner join jai jamais vu !!
Marsh Posté le 15-02-2005 à 21:31:13
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
Marsh Posté le 15-02-2005 à 21:41:24
jvai tenter ca cette requete !!
Pour les prochains (si jamais ca marche pas), la base de données est sous access!
Marsh Posté le 15-02-2005 à 22:03:05
pourquoi je m'échine sur ce truc j'ai l'impression qu'on parle pas le meme langage !!
Marsh Posté le 17-02-2005 à 12:14:06
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
Marsh Posté le 17-02-2005 à 21:27:52
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é):
|
C'est le moyen le plus simple que j'ai trouvé, mais qq'un d'autre trouvera peut-être une solution encore plus simple.
Marsh Posté le 01-03-2005 à 21:24:26
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 ??
Marsh Posté le 14-02-2005 à 22:42:11
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 !!