Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2010, 11h10   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 4
Points : 0
Points : 0
Par défaut Requête impossible à trouver

Bonjour,

ça fait plus de 24h que je me prend la tête pour une requête, voila mon problème :
J'ai une table MEMBRE(id, login, adress) qui est lié à une table PROP(id, membre_id, resultat_id) qui est lié à RESULTAT(id, resultat).

Donc un membre peut avoir un ou plusieurs résultats, ce que j'aimerais c'est de récupérer chaque membre avec son meilleur résultat, et le tout trié par résultats DESC. A chaque fois j'ai un problème, soit j'ai plusieurs fois le même membre qui apparait, soit le tri ne marche pas...

Merci pour votre aide
superAldo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 11h28   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 720
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 720
Points : 6 840
Points : 6 840
Bonjour,

Pouvez vous nous donner un jeu de données svp

Merci

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 11h42   #3
Invité de passage
 
Inscription : octobre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 4
Points : 0
Points : 0
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
INSERT INTO MEMBRE(mmbr_id, mmbr_login, mmbr_city) VALUES(1, 'toto', 'PARIS');
INSERT INTO MEMBRE(mmbr_id, mmbr_login, mmbr_city) VALUES(2, 'titi', 'LYON');
INSERT INTO MEMBRE(mmbr_id, mmbr_login, mmbr_city) VALUES(3, 'tutu', 'MARSEILLE');
 
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(1, 1, 1);
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(2, 1, 2);
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(3, 1, 3);
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(4, 2, 4);
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(5, 2, 5);
INSERT INTO PROP(prop_id, mmbr_id, resultat_id) VALUES(6, 3, 6);
 
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(1, 100);
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(2, 100);
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(3, 99);
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(4, 100);
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(5, 98);
INSERT INTO RESULTAT(resultat_id, resultat) VALUES(6, 52);
Ah oui et si le membre a son meilleur résultat égale à 100 par exemple comme toto, je veux récuperer une seule ligne dans mes résultats et non deux (alors que toto a obtenu deux fois 100)
Voila par exemple un bout de table, merci!
superAldo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 14h35   #4
Invité de passage
 
Inscription : octobre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 4
Points : 0
Points : 0
Ca yest jai enfin trouvé comment faire!!

Code :
1
2
3
4
5
SELECT * FROM(
SELECT MEMBRE.mmbr_id, MEMBRE.mmbr_login, MAX(RESULTAT.resultat) AS result
FROM MEMBRE INNER JOIN PROP ON MEMBRE.mmbr_id = PROP.mmbr_id INNER JOIN RESULTAT ON PROP.resultat_id = RESULTAT.resultat_id
GROUP BY MEMBRE.mmbr_id, MEMBRE.mmbr_login) AS REQ
ORDER BY REQ.result DESC
Merci!!
superAldo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 23h47   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 470
Points : 10 470
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Le select extérieur peut être évité, il n'apporte rien.
Je vous conseil dès que vous avez plus d'une table d'utiliser systématiquement des alias de table : ça allège la requête et la rend plus lisible.
Préfixez également le nom de vos tables par le nom du schéma.

Votre requête :
Code :
1
2
3
4
5
6
7
8
9
  SELECT mm.mmbr_id, mm.mmbr_login,
         MAX(rs.resultat) AS result
    FROM dbo.MEMBRE AS mm
         INNER JOIN dbo.PROP AS pp
           ON pp.mmbr_id = mm.mmbr_id
         INNER JOIN dbo.RESULTAT AS rs
           ON rs.resultat_id = pp.resultat_id
GROUP BY mm.mmbr_id, mm.mmbr_login
ORDER BY result DESC;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h46.


 
 
 
 
Partenaires

Hébergement Web