warzet
Messages postés44Date d'inscriptionlundi 27 août 2007StatutMembreDernière intervention 1 novembre 2016
-
3 sept. 2013 à 09:13
warzet
Messages postés44Date d'inscriptionlundi 27 août 2007StatutMembreDernière intervention 1 novembre 2016
-
25 oct. 2013 à 08:59
Bonjour à tous,
Je voudrais savoir s'il m'est possible de ressortir le numéro de position exacte d'un enregistrement dans une requête SQL? Je m'explique: voici une requête
private void nbTotalNotes()
{
DtSet.Clear();
string sAllElevesNotes = "SELECT Conseil_Trimestriel.code_eleve, Eleves.nom_eleve, Eleves.prenom_eleve, Eleves.date_naissance," + "\n" +
"Annees_Scolaires.annee, Classes.classe, Trimestres.trimestre, Conseil_Trimestriel.total, Conseil_Trimestriel.coefficient," + "\n" +
"Conseil_Trimestriel.moyenne_trimestrielle, Appreciations.appreciation, Conseil_Trimestriel.observations, Professeur_PP.code_enseignant," + "\n" +
"Conseil_Trimestriel.date_conseil" + "\n" +
"FROM Eleves, Professeur_PP, Conseil_Trimestriel, Annees_Scolaires, Classes, Trimestres, Appreciations" + "\n" +
"WHERE Conseil_Trimestriel.code_annee = Annees_Scolaires.code_annee AND Conseil_Trimestriel.code_classe = Classes.code_classe AND" + "\n" +
"Conseil_Trimestriel.code_trimestre = Trimestres.code_trimestre AND Professeur_PP.code_enseignant = Conseil_Trimestriel.code_enseignant AND" + "\n" +
"Eleves.code_eleve = Conseil_Trimestriel.code_eleve AND Conseil_Trimestriel.code_appreciation = Appreciations.code_appreciation" + "\n" +
"GROUP BY Conseil_Trimestriel.code_eleve, Eleves.nom_eleve, Eleves.prenom_eleve, Eleves.date_naissance, Annees_Scolaires.annee," + "\n" +
"Classes.classe, Trimestres.trimestre, Conseil_Trimestriel.total, Conseil_Trimestriel.coefficient, Conseil_Trimestriel.date_conseil," + "\n" +
"Conseil_Trimestriel.moyenne_trimestrielle, Appreciations.appreciation, Conseil_Trimestriel.observations, Professeur_PP.code_enseignant" + "\n" +
"ORDER BY Conseil_Trimestriel.moyenne_trimestrielle DESC, Annees_Scolaires.annee DESC";
OleDbDataAdapter Adapt = new OleDbDataAdapter(sAllElevesNotes, strConex);
try
{
//On stock les résultats trouvé dans un DataSet pour les compter
Adapt.Fill(DtSet, "Conseil_Trimestriel");
//Adapt.Fill(this.DtsGrid, "Absences");
//iTotal est egal au count total du nombre de tuple dans ma base
this.iTotal = DtSet.Tables[0].Rows.Count;
if (iTotal == 0)
{
this.lblTotal.Text = "Nombre total de Décision de Conseil Enregistrée : " + string.Concat(iTotal.ToString(), " Décision");
}
else if (iTotal > 1)
{
this.lblTotal.Text = "Nombre total de Décisions de Conseil Enregistrées : " + string.Concat(iTotal.ToString(), " Décisions");
}
//on rempli la liste avec le dataset
this.DttGrid = this.DtSet.Tables["Conseil_Trimestriel"];
//on affiche la liste dans le datagridview
this.dgvEleves.DataSource = this.DttGrid;
StyledgvEleves();
this.Conex.Close();
}
catch (FileNotFoundException ex)//(Exception j)
{
//MessageBox.Show(j.Message.ToString());
//MessageBox.Show("Aucune donnée n'est enregistrée dans la Base de données", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Est-il possible dans cette requête si je prends un élève quelconque de déterminer et ressortir son rang (classement réel non basé sur le champ id auto-incrémenté) sous forme numérique?
Merci de bien vouloir m'aider.
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 3 sept. 2013 à 09:58
Salut !
Que veux-tu dire pas "rang"? Car pour moi "classement réel" ne veut rien dire si je ne sais pas ce qu'il représente ^^. (C'est basé sur un calcul? si oui, lequel, que représente t'il? ).
Avec quelques précision je pourrai surement t'aider ^^
warzet
Messages postés44Date d'inscriptionlundi 27 août 2007StatutMembreDernière intervention 1 novembre 2016 4 sept. 2013 à 09:18
Je te remercie déjà pour m'avoir répondu, alors saches que avec cette requête, je ressorts une liste d'élève avec leur moyenne scolaire ordonnée de la plus grande moyenne vers la plus faible, aussi je voudrais savoir si j'ai la possibilité de créer une colonne pour ressortir un classement, du 1er au dernier, cela est-il possible? Ou alors comment procéder encore à toi NAGASHIMA
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 4 sept. 2013 à 10:49
tu n'es pas obligé de créer une colonne pour cela... il suffit de connaître l'index de la ligne...
Mais sinon, tu peux ajouter row_number() à ta requête (en sql server).
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 4 sept. 2013 à 11:48
salut !
Alors dans ce cas il va falloir que tu regarde différentes choses.
La première sera le "group by" qui te permettra de regrouper ce qui concerne un élément (dans ton cas tu peux grouper par identifiant d'élève).
Ensuite, si, pour faire simple, tu fais :
select id_eleve, moyenne from (
SELECT id_eleve , (SUM(note_eleve) / count(notes_eleve) as moyenne
FROM notes_eleve
GROUP BY id_eleve) as sous_requete
order by moyenne desc
Dans mon cas j'imagine posséder une table simple "notes_eleve" qui possède 2 colonnes : un id et une note.
la sous requete :
SELECT id_eleve , (SUM(note_eleve) / count(notes_eleve) as moyenne
FROM notes_eleve
GROUP BY id_eleve
me permet de regrouper pour 1 identifiant (donc un élève) les notes, "SUM" calcul la somme des notes pour un même identifiant, et "count" renverra le "nombre de lignes". (si il y a 3 notes => ca sera divisé par 3)
à noter que dans mon cas toutes les notes sont à la même echelle (par exemple les notes /20 points).
L'ajouter à une sous requête me permet ensuite de trier ces résultat du plus grand au plus petit grâce au "order by" et le "desc" (=> descendant)
Bien sûr dans ton cas il y a aura probablement d'autres infos à récupérer (comme les noms, prénoms, classes, etc.) mais ca ca sera à toi d'y penser ^^
demande si il y a des choses pas trop clair (ou si ce n'est pas vraiment ce que tu veux..).
warzet
Messages postés44Date d'inscriptionlundi 27 août 2007StatutMembreDernière intervention 1 novembre 2016 6 sept. 2013 à 09:16
Merci Naga
compte tenu du fait que je suis un débutant, pourrais-tu me dire comment introduire le row_number() dans ma requête. Merci
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 6 sept. 2013 à 09:57
Je n'ai jamais utilisé cette fonction, mais si je comprend bien ca permet de rajouter un id incrémenté dans le jeu de résultat ... donc bon je te renvoi sur un lien :
http://msdn.microsoft.com/fr-fr/library/ms186734.aspx
dans ton ca je pense que la syntaxe serai :
ROW_NUMBER() OVER(PARTITION BY Conseil_Trimestriel.code_eleve ORDER BY Conseil_Trimestriel.moyenne_trimestrielle DESC) AS Row
je ne peux pas tester donc il faudra probablement l'adapter