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

Développement SQL Server Discussion :

Listes les notes par élève.


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Listes les notes par élève.
    Bonjour,
    Je n'arrive pas à créer une requête qui m'affiche la liste des notes par élève.
    c'est-à-dire : chaque ligne représente un élève et ses notes.
    La tables des T_Eleves : numeroEleve, nom, ...
    La table des T_Notes : numEleve, Note, Annee, Mois, ...

    Le code SQL suivant aboutit à une erreur : La sous-requête a retourné plusieurs valeurs, cela n'est pas autorisé ...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT dbo.T_Eleves.nom, dbo.T_Eleves.nEleve,
     (SELECT T_Notes.Note
    FROM T_Notes WHERE T_Notes.Annee=2020 AND T_Notes.Mois = 3) AS N 
    FROM T_Eleves


    Merci d'avance

  2. #2
    Expert éminent sénior
    Bonjour,
    Pourquoi tu passes par une sous-requête, alors qu'une jointure fera parfaitement le travail ?

    Tatayo

  3. #3
    Membre du Club
    Bonjour,
    Avec une jointure entre les deux tables me donne aussi une note par ligne et par élève.
    Je dois afficher par ligne : l'élève et ses différentes notes.
    Cordialement

  4. #4
    Expert éminent sénior
    Bonjour,

    il faut utiliser la fonction STRING_AGG() pour mettre tous les éléments sur une ligne.
    Et effectivement utiliser une jointure plutôt qu'une requête imbriquée

  5. #5
    Membre du Club
    Bonjour,

    J'ai l'impression que lq fonction STRING_AGG() n'existe pas dans SqlServer 2005 ?

    j'ai ce message d'erreur : string_agg n'est pas une option nom de fonction intégrée reconnue
    lors de l'exécution de la requête suivante :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dbo.T_Eleves.nom, dbo.T_Eleves.nEleve, string_agg(CONVERT(nvarchar(MAX), dbo.T_Notes.Note)) AS Notes
    FROM  dbo.T_Notes INNER JOIN dbo.T_Eleves ON dbo.T_Notes.nEleve = dbo.T_Eleves.nEleve
    GROUP BY dbo.T_Eleves.nom, dbo.T_Eleves.nEleve

  6. #6
    Expert éminent
    Citation Envoyé par tonton67 Voir le message
    J'ai l'impression que lq fonction STRING_AGG() n'existe pas dans SqlServer 2005 ?
    Effectivement !
    Il serait peut-être temps d'upgrader aussi, c'est une version qui n'est plus supporté depuis 2012...
    les règles du forum - mode d'emploi du forum
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    JE NE RÉPONDS PAS aux questions techniques par message privé.

  7. #7
    Membre du Club
    bonsoir,
    oui effectivement,
    merci pour vos conseils

  8. #8
    Expert éminent sénior
    La fonction STRING_AGG() est proposée depuis SQL server 2017

  9. #9
    Membre du Club
    Bonjour,
    J'ai installé sql server 2019 developper, votre conseil fonction très bien.
    Merci beaucoup

###raw>template_hook.ano_emploi###