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 13/12/2011, 13h55   #1
Nouveau Membre du Club
 
Avatar de bouchra19
 
Femme bouchra
Développeur multimédia
Inscription : juin 2011
Messages : 65
Détails du profil
Informations personnelles :
Nom : Femme bouchra

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 65
Points : 34
Points : 34
Par défaut Requête SQL-Server

Bonjour tout le monde

Je travaille sur un TD de sql (cas d'un camping) qui se trouve à cette adresse: http://perso.modulonet.fr/~placurie/...%20complet.pdf

Je veux afficher le nom et prénom du client qui a le plus de réservations
J'ai réussi à afficher seulement le nombre de réservations max sans le nom et le prénom avec cette requête:
Code :
1
2
3
4
5
SELECT max(nb) AS mx
FROM (SELECT R.CLI_ID, count(*) AS nb
FROM CLIENT C, RESERVATION R
WHERE C.CLI_ID=R.CLI_ID
GROUP BY R.CLI_ID) AS T;
comment je peux afficher aussi le nom et le prénom svp?
bouchra19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h02   #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
Et si plusieurs client ont le même nombre de réservation?
Code :
1
2
3
4
5
6
7
8
9
10
 
;WITH CTEclient (CLI_ID ,NB)
AS
(
    SELECT R.CLI_ID, count(*) AS NB
FROM CLIENT C 
   INNER JOIN RESERVATION R
      ON C.CLI_ID=R.CLI_ID
GROUP BY R.CLI_ID
)
OU:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
;WITH CTEclient (CLI_ID ,NB)
AS
(
    SELECT R.CLI_ID, count(*) AS NB
FROM CLIENT C 
   INNER JOIN RESERVATION R
      ON C.CLI_ID=R.CLI_ID
GROUP BY R.CLI_ID
)
SELECT TOP 1 C.nom,C.prenom
FROM client C 
   INNER JOIN CTEclient CT
      ON CT.CLI_ID=C.CLI_ID
ORDER BY CT.NB DESC
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h12   #3
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 725
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 725
Points : 6 849
Points : 6 849
Je pense que l'option WITH TIES ne sera pas superflue dans ce cas surtout si 2 clients ont le même nombre total de réservations

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h48   #4
Nouveau Membre du Club
 
Avatar de bouchra19
 
Femme bouchra
Développeur multimédia
Inscription : juin 2011
Messages : 65
Détails du profil
Informations personnelles :
Nom : Femme bouchra

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 65
Points : 34
Points : 34
Merci pour votre aide

j'ai pas compris à quoi sert "with" et "inner join" (parce que je suis débutante )

mais j'ai essayé une autre requête plus simple et ça a marché impeccablement

Code :
1
2
3
4
5
SELECT top 1 count(R.Cli_Id) AS Mx, cli_nom, cli_pnom
FROM client C, reservation R
WHERE C.CLI_ID=R.CLI_ID
GROUP BY R.Cli_Id, cli_nom, cli_pnom
ORDER BY Mx DESC;
bouchra19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h10   #5
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 725
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 725
Points : 6 849
Points : 6 849
WITH TIES vous permet de remonter les lignes ayant un résultat équivalent pour le nombre de réservations.

Imaginez que 2 personnes arrivent en tête. Dans ce cas il faut bien remonter toutes les 2 parce qu'elles sont ex æquo.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 20h39   #6
Nouveau Membre du Club
 
Avatar de bouchra19
 
Femme bouchra
Développeur multimédia
Inscription : juin 2011
Messages : 65
Détails du profil
Informations personnelles :
Nom : Femme bouchra

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 65
Points : 34
Points : 34
ah ok merci pour cette info

mais je pense pas que ça a le même effet que le ";with ...As ..." que Iberserk a mentionné

j'ai cherché sur internet mais j'ai rien trouvé

svp qui a un lien de cours à ce propos ?
bouchra19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 11h03   #7
Modérateur
 
Avatar de Chtulus
 
Homme Cédric
Cherche à comprendre
Inscription : avril 2008
Messages : 2 262
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Cherche à comprendre

Informations forums :
Inscription : avril 2008
Messages : 2 262
Points : 4 421
Points : 4 421
Envoyer un message via MSN à Chtulus Envoyer un message via Skype™ à Chtulus
Bonjour,

De la lecture (Fouillez un peu !) :

- Les jointures
- CTE

__________________
- De quelque manière qu'on s'y prenne on s'y prend toujours mal -
-Sigmund Freud-

Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
Tous les cours Office

Chtulus 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 04h45.


 
 
 
 
Partenaires

Hébergement Web