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 21/07/2011, 03h15   #1
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Par défaut Fonction SQL - Les 10 meilleurs Valeurs

Bonjour,

J'ai une Table qui contient la liste des cotisations des clients , je cherche à obtenir les 10 meilleurs montant de cotisation pour l'un des clients .
Quelle est le fonction qui me permet d'avoir ce résultats ???
Merci.

voila la structure de ma table :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE TABLE [dbo].[cotisation ](
	[num_pens] [char](10) NOT NULL,
	[ann_cotisation] [int] NOT NULL,
	[mt_cotisation] [money] NOT NULL,
 CONSTRAINT [PK_cotisation ] PRIMARY KEY CLUSTERED 
(
	[num_pens] ASC,
	[ann_cotisation] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 07h29   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,

quel est votre sgbd ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 10h12   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Avec une auto jointure, un count, et un having, vous devriez pouvoir vous en sortir.

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 10h13   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Et quelle est la structure de la table.

Bref, respectez les règles de ce forum.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h54   #5
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par punkoff Voir le message
bonjour,

quel est votre sgbd ?
je travaille avec Sql server 2008
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h08   #6
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par CinePhil Voir le message
Et quelle est la structure de la table.

Bref, respectez les règles de ce forum.
je viens d’insérer la structure de ma table , désolé
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h11   #7
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par Yanika_bzh Voir le message
Avec une auto jointure, un count, et un having, vous devriez pouvoir vous en sortir.

Bon courage
je viens de poster la structure de ma table , donnez moi la requête svp.
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h20   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
qu'avez vous essayé ?

edit : si vous n'avez besoin que des X premières valeurs pour un client alors la fonction TOP pourra être utilisée.

Si vous avez besoin de ces valeurs pour n clients différents il faudra regardé du côté des fonction de fenêtrage avec row_number() ou rank() ou ...
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h49   #9
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par punkoff Voir le message
qu'avez vous essayé ?

edit : si vous n'avez besoin que des X premières valeurs pour un client alors la fonction TOP pourra être utilisée.

Si vous avez besoin de ces valeurs pour n clients différents il faudra regardé du côté des fonction de fenêtrage avec row_number() ou rank() ou ...
Non j'ai besoin des X meilleurs valeurs pour un clients ( Les 10 MAX valeurs cotisé )
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h36   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Euh... quelle est la différence entre ce morceau de phrase :
Citation:
Envoyé par punkoff
X premières valeurs pour un client
et celui-ci :
Citation:
Envoyé par zayoub
X meilleurs valeurs pour un clients
À la faute d'orthographe près, et à "premières" au lieu de "meilleures", j'ai un peu l'impression que c'est pareil !

Veux-tu dire qu'en fait tu veux les dix clients ayant le plus cotisé ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h03   #11
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par CinePhil Voir le message
Euh... quelle est la différence entre ce morceau de phrase :

et celui-ci :

À la faute d'orthographe près, et à "premières" au lieu de "meilleures", j'ai un peu l'impression que c'est pareil !

Veux-tu dire qu'en fait tu veux les dix clients ayant le plus cotisé ?
c bon j'ai réussie à obtenir les 10 meilleurs montants cotisé d'un client avec cette requette
Code :
1
2
3
4
5
 
SELECT TOP 10 mt_cotisation AS best_10
FROM [cotisation ]
WHERE num_pens = '0000000001'
ORDER BY mt_cotisation DESC
j'ai le résultat suivant :

Code :
1
2
3
4
5
6
7
8
9
 
     best_10
     --------
1   12345,09
2   2335,989
.
.
.
10  3465,88
comme vous pouvez le voir, j'ai utiliser la fonction TOP avec un ORDER BY et ça marche très bien, maintenant je veux la moyenne des resultats retourné par cette requette , comment faire ??
Merci pour votre patience
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h09   #12
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
En faisant comme tu l'indiques :

en faisant la moyenne des valeurs fournies par la requête
Code :
1
2
3
 
SELECT AVG(test_10)
FROM ("la requête")
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h21   #13
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par dehorter olivier Voir le message
En faisant comme tu l'indiques :

en faisant la moyenne des valeurs fournies par la requête
Code :
1
2
3
 
SELECT AVG(test_10)
FROM ("la requête")
Voici mon code :
Code :
1
2
3
4
5
6
 
SELECT AVG(best_10)
FROM( SELECT TOP 10 mt_cotisation AS best_10 
	  FROM [cotisation ]
	  WHERE num_pens = '1999123456'
	  ORDER BY mt_cotisation DESC)
j'obtiens l'erreur : Msg*102, Niveau*15, État*1, Ligne*5 Syntaxe incorrecte vers ')'.
je vois absolument pas d’où ça vient !!!!
zayoub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h28   #14
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
il faut nommer la sous-requête
Code :
1
2
3
4
5
6
 
SELECT AVG(best_10)
FROM (SELECT TOP 10 mt_cotisation AS best_10 
	  FROM [cotisation ]
	  WHERE num_pens = '1999123456'
	  ORDER BY mt_cotisation DESC) AS SELECTION
Voir les FAQ et petits papier de SQLPro
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/07/2011, 17h29   #15
Futur Membre du Club
 
Homme Ayoub Zamouchi
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Ayoub Zamouchi
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 16
Points : 16
Citation:
Envoyé par dehorter olivier Voir le message
il faut nommer la sous-requête
Code :
1
2
3
4
5
6
 
SELECT AVG(best_10)
FROM (SELECT TOP 10 mt_cotisation AS best_10 
	  FROM [cotisation ]
	  WHERE num_pens = '1999123456'
	  ORDER BY mt_cotisation DESC) AS SELECTION
Voir les FAQ et petits papier de SQLPro
Merci Infiniment !!! ça marche
zayoub 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 00h29.


 
 
 
 
Partenaires

Hébergement Web