IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

calcul d'un rang, problème de classement


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Par défaut calcul d'un rang, problème de classement
    Bonjour
    excusez mais je reviens à la charge .

    j'ai une table moyenne avec comme champs
    matricule,trimestre,annee,classe,moyenne.
    je tente en vain de faire executer une requete pour faire le classement par ordre de merite cad moyenne 17 rang 1er ; moyenne 12 rang 2eme etc...

    voici la requete :[
    SELECT matricule_elev,moyenne_trim,
    (SELECT COUNT (*) + 1 FROM MOYEN_ELEV_TRIM S
    WHERE P.code_trim = S.code_trim
    AND P.code_annee = S.code_annee
    AND P.num_classe = S.num_classe
    AND P.moyenne_trim = S.moyenne_trim ) AS RANG
    FROM MOYEN_ELEV_TRIM P
    and P.code_trim=:trim
    and P.code_annee=:ane
    and P.num_classe=:class
    ORDER BY RANG ASC
    ]
    quand je l'execute il m'affiche l'erreur suivante : ''Objet parameter defini de manière incorrecte des informations incohérentes ou incomplètes ont été fournies''
    Mais quand j'enlève les parameètre ça marche :
    [
    SELECT matricule_elev,moyenne_trim,
    (SELECT COUNT (*) + 1 FROM MOYEN_ELEV_TRIM S
    WHERE P.code_trim = S.code_trim
    AND P.code_annee = S.code_annee
    AND P.num_classe = S.num_classe
    AND P.moyenne_trim = S.moyenne_trim ) AS RANG
    FROM MOYEN_ELEV_TRIM P
    ORDER BY RANG ASC
    ]


    j'avoue que je suis perdu . pourquoi la requete plus haut ne tourne pas ?
    de l'aide SVP .
    Celui qui demande ne se perd pas-----------------

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    peut étre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT matricule_elev,moyenne_trim,
    (SELECT COUNT (*) + 1 FROM MOYEN_ELEV_TRIM S
    WHERE P.code_trim = S.code_trim
    AND P.code_annee = S.code_annee
    AND P.num_classe = S.num_classe
    AND P.moyenne_trim = S.moyenne_trim ) AS RANG
    FROM MOYEN_ELEV_TRIM P
    where P.code_trim=:trim
    and P.code_annee=:ane
    and P.num_classe=:class
    ORDER BY RANG ASC

  3. #3
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Il aurait été bon de continuer sur le thread d'origine :
    http://www.developpez.net/forums/sho...d.php?t=139375

    Visiblement, ce n'est pas un problème SQL, mais bien de syntaxe SQL Server, je déplace donc.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Par défaut [SQL Server] Probleme avec une requête
    Bonjour,
    je reviens à la charge
    excuser d'être emmerdant mais il le faut pour avancer- OK
    j'utilise SQL server 2000.

    ma table ''moyenne'' comporte comme champs :
    matricule,trimestre,annee,classe,moyen_trim . les 4 premiers champs constitue la clé. je stocke les moyennes de tous les élèves chaque fin de trimestre quelquesoit la classe, le trimestre ,l'année scolaire etc . exemple :

    matricule e001
    trimestre 03
    annee 02
    classe 11
    moyen_trim 12,50. (etc...)

    maintenant je dois faire le classement des éléves (1er ; 2eme, 3eme etc..et traiter les exequo) par classe, par trimestre,. pour cela je dois à partire d'une form (delphi) (faire un choix quelconque d'une classe donnée)entrer les paramètres classe,annee,trimestre. afin de pouvoir mettre sur les bulletins de chaque élève son rang .
    NB : l'edition des bulletins se fait par classe cà d qu'on doit pourvoir à partir des paramètres entrer choisir d'imprimer une classe quelconque.
    voici ma requête qui affiche tjours erreur ''objet parameter defini de manière incorrecte''

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT matricule, moyenne_trim,
        (SELECT COUNT (*) +1 FROM moyenne S
         WHERE S.trimestre=P.trimestre
           AND S.annee = P.annee
          AND S.classe = P.classe
          AND S.moyen_trim > P.moyen_trim) AS rang
    FROM moyenne P
      Where P.trimestre=:trim
       AND P.annee=:annee
       AND P.classe:= classe
    ORDER BY rang, ASC
    [/code]]
    --
    [/quote]
    je n'arrive pas à m'en sortir éclairage SVP. ou ya t il d'autres astuce ?
    vraiment embarrassé
    merci 'davance

  5. #5
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Je fusionne puisque c'est une suite

    La syntaxe de ta requête comprend des := pour te permettre de renseigner des valeurs (ici : trim, annee, classe), ce qui fonctionner sous l'interpréteur de requête de ton SGBD, mais certainement pas via une interface de type formulaire, où tu dois gérer ta requête SQL sous forme d'une chaîne de caractères, construite avec les valeurs choisies par l'utilisateur.

    Si cela ne t'inspire pas, je te conseille la lecture de tuto pour voir comment on interroge des données à partir d'une interface Delphi. Tu trouveras des tutos ici :
    http://delphi.developpez.com/cours/
    (cherches les mots-clé SGBD ou ADO)
    Ex :
    Tutoriel : Débuter l'ADO avec delphi
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par Xo
    Je fusionne puisque c'est une suite

    La syntaxe de ta requête comprend des := pour te permettre de renseigner des valeurs (ici : trim, annee, classe), ce qui fonctionner sous l'interpréteur de requête de ton SGBD, mais certainement pas via une interface de type formulaire, où tu dois gérer ta requête SQL sous forme d'une chaîne de caractères, construite avec les valeurs choisies par l'utilisateur.
    Le := est une spécificité Oracle, et donc n'a aucun moyen de passer sous MS-SQL

    De plus, l'utilisation de tables dérivées n'est pas performante.

    Pour passer des variables, c'est des @.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DECLARE @classe int, @trim int, @classe varchar(5)
     
    SELECT matricule_elev,moyenne_trim,
    (SELECT COUNT (*) + 1 FROM MOYEN_ELEV_TRIM S
    WHERE P.code_trim = S.code_trim
    AND P.code_annee = S.code_annee
    AND P.num_classe = S.num_classe
    AND P.moyenne_trim = S.moyenne_trim ) AS RANG
    FROM MOYEN_ELEV_TRIM P
    and P.code_trim=@trim
    and P.code_annee=@annee
    and P.num_classe=@classe
    ORDER BY RANG ASC
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

Discussions similaires

  1. [SQL Server] problème de classement, calcul d'un rang
    Par lepeule dans le forum Langage SQL
    Réponses: 12
    Dernier message: 22/10/2019, 10h31
  2. Calcul d'un rang dans une requête
    Par rossy dans le forum Access
    Réponses: 7
    Dernier message: 26/07/2018, 19h17
  3. Problème de classement sur ouverture de Formulaire ACCESS
    Par Harold_le_Rouge dans le forum VBA Access
    Réponses: 12
    Dernier message: 24/05/2007, 23h25
  4. Problème de Classement dynamique
    Par Faboul dans le forum Access
    Réponses: 3
    Dernier message: 20/03/2007, 16h22
  5. Calcul dans un triggers : problème du +
    Par eXiaNazaire dans le forum Oracle
    Réponses: 3
    Dernier message: 07/01/2005, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo