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

Langage SQL Discussion :

[SQL Server] probléme de division


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut [SQL Server] probléme de division
    bonjour,

    j'ai un problème avec une requete, je ne comprend pas pourquoi ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    SELECT           a.idSalarie,
                         a.idFormateur,
                         b.nom +' '+ b.prenom stagiaire, 
                         d.nom +' '+d.prenom AS formateur, 
                        ((f.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(f.nbreHeure*e.salaireMoy)) AS cout1,
                        (a.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(a.nbreHeure*e.salaireMoy) AS cout2 
    FROM 
                               EffectueFormationInterne a,  
                                Salarie b, 
                                Csp c,  
                                Salarie d,  
                                Csp e,
                                ProposeFormationInterne f,
                                EffectueFormationInterne g 
     WHERE 
                      c.idCsp = b.idCsp 
                      AND     b.idSalarie=a.idSalarie 
                      AND     d.idCsp=e.idCsp 
                      AND d.idSalarie =a.idFormateur 
                      AND f.idFormation=a.idFormation 
                      AND f.idFormateur=a.idFormateur 
                      AND a.idFormation='10' 
                      AND a.annee = '2006' 
                      AND g.idFormation='10' 
                      AND g.annee = '2006'
    Depuis que j'ai rajouter les divisions , il me génère l'erreur :
    Msg*8120, Niveau*16, État*1, Ligne*1
    La colonne 'EffectueFormationInterne.idSalarie' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    Quelqu'un pourrait m'aider ??

    Merci

    Mich

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1

    A +

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup pour ta réponse.

    alors j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    SELECT           a.idSalarie,
                         a.idFormateur,
                         b.nom +' '+ b.prenom stagiaire, 
                         d.nom +' '+d.prenom AS formateur, 
                        ((f.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(f.nbreHeure*e.salaireMoy)) AS cout1,
                        (a.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(a.nbreHeure*e.salaireMoy) AS cout2 
    FROM 
                               EffectueFormationInterne a,  
                                Salarie b, 
                                Csp c,  
                                Salarie d,  
                                Csp e,
                                ProposeFormationInterne f,
                                EffectueFormationInterne g 
     WHERE 
                      c.idCsp = b.idCsp 
                      AND     b.idSalarie=a.idSalarie 
                      AND     d.idCsp=e.idCsp 
                      AND d.idSalarie =a.idFormateur 
                      AND f.idFormation=a.idFormation 
                      AND f.idFormateur=a.idFormateur 
                      AND a.idFormation='10' 
                      AND a.annee = '2006' 
                      AND g.idFormation='10' 
                      AND g.annee = '2006'
    GROUP BY    
                     a.idSalarie

    Et il me génère une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe incorrecte vers 'idSalarie'

    Quelqu'un pourrait m'aider ?

    Mich

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Il faut faire appel à tous les champs de la sélection autres que les champs de calcul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GROUP BY
    a.idSalarie,
    a.idFormateur,
    b.nom +' '+ b.prenom , 
    d.nom +' '+d.prenom
    De plus, pour concaténer les chaînes de caractères il est préférable d'utiliser la fonction
    CONCAT(chaîne1,chaîne2)

    On ne remerciera jamais assez MSSQL SERVER pour la qualité de ses messages d'erreurs... Je vais d'ailleurs chercher si cela ne se paramètre pas...

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    merci pour ta réponse,

    j'ai encore un message d'erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Msg*8120, Niveau*16, État*1, Ligne*1
    La colonne 'ProposeFormationInterne.nbreHeure' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    Msg*8120, Niveau*16, État*1, Ligne*1
    La colonne 'Csp.salaireMoy' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    Msg*8120, Niveau*16, État*1, Ligne*1
    La colonne 'ProposeFormationInterne.nbreHeure' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    Msg*8120, Niveau*16, État*1, Ligne*1
    La colonne 'Csp.salaireMoy' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

    Merci

  6. #6
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    le message d'erreur est pourtant clair !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    SELECT           a.idSalarie,
                         a.idFormateur,
                         b.nom +' '+ b.prenom stagiaire, 
                         d.nom +' '+d.prenom AS formateur, 
                        ((f.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(f.nbreHeure*e.salaireMoy)) AS cout1,
                        (a.nbreHeure*c.salaireMoy/COUNT(g.idSalarie))+(a.nbreHeure*e.salaireMoy) AS cout2 
    FROM 
                               EffectueFormationInterne a,  
                                Salarie b, 
                                Csp c,  
                                Salarie d,  
                                Csp e,
                                ProposeFormationInterne f,
                                EffectueFormationInterne g 
     WHERE 
                      c.idCsp = b.idCsp 
                      AND     b.idSalarie=a.idSalarie 
                      AND     d.idCsp=e.idCsp 
                      AND d.idSalarie =a.idFormateur 
                      AND f.idFormation=a.idFormation 
                      AND f.idFormateur=a.idFormateur 
                      AND a.idFormation='10' 
                      AND a.annee = '2006' 
                      AND g.idFormation='10' 
                      AND g.annee = '2006'
    GROUP BY    
    a.idSalarie,
    a.idFormateur,
    b.nom +' '+ b.prenom , 
    d.nom +' '+d.prenom ,
     a.nbreHeure,
    c.salaireMoy

Discussions similaires

  1. Microsoft SQL Server error: 233
    Par agdid04 dans le forum Administration
    Réponses: 6
    Dernier message: 20/04/2013, 08h42
  2. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  3. Réponses: 3
    Dernier message: 25/05/2008, 15h16

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