Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 09/02/2011, 11h29   #1
Invité de passage
 
gabriel godefroy
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : gabriel godefroy
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
Par défaut Requête COUNT & MAX

Bonjour,

J'ai deux Table dont l'une contient, en clé étrangère, la clé primaire de l'autre
Je voudrait obtenir la ligne de la première table pour laquelle sa clé primaire apparait le plus souvent dans les lignes dans la seconde table

C'est un peu tordu à expliquer comme ça, le schéma est plus parlant:



Mon But est d'obtenir les NomAbonne et PrenomAbonne pour lequel le IdAbonne est présent dans le plus de lignes de la table PRETS
Ma requête ressemble à ça:
Code :
1
2
3
4
5
SELECT NomAbonne, PrenomAbonne
FROM ABONNES
WHERE (IdAbonne =
          (SELECT PRETS.IdAbonne, MAX(COUNT(*)) AS Expr1
          FROM PRETS INNER JOIN ABONNES AS ABONNES_1 ON PRETS.IdAbonne = ABONNES_1.IdAbonne))
Cette requête ne fonctionne pas

Je suis désespéré de rester bloqué sur une requête qui avait l'air aussi simple au départ

Pouvez vous m'aider?
trankill076 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h58   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT NomAbonne, 
          PrenomAbonne
FROM ABONNES
WHERE IdAbonne =
          (SELECT TOP 1 gb.IdAbonne 
           FROM
              (SELECT P.IdAbonne, COUNT(*) AS Nbr
	       FROM PRETS P
	       GROUP BY P.IdAbonne
       	       ORDER BY COUNT(*) DESC
               ) AS gb
           )
Note que cela n'est pas génial, on voit bien que l'utilisation du TOP 1 est nécessaire si tu ne veux retourner qu'un seul abonne.

Or si trois abonnes ont le même nombre de prêts? tu laisses arbitrairement à SQL SERVER le "soin" de choisir parmi les 3!
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h18.


 
 
 
 
Partenaires

Hébergement Web