Fonction count (SQL) sous acces

Nico90 -  
xsure Messages postés 52 Statut Membre -
Bonjour, j'ai un problème dans une requette SQL sous access, j'ai créer mes tables comme cela :

EMPLOYE (Numemp, Nomemp, Salemp,#Numfonction, #Numserv)
FONCTION(Numfonction, Libfonction)
SERVICE (Numserv, Nomserv, Nombatiment)

Ma requette consiste a effectuer le nombre d'employés dans chaque service (en utilisant la fonction count)

SELECT SERVICE.Nomserv, nbemp count(*)
FROM SERVICE
WHERE EMPLOYE.#Numfonction = FONCTION.Numfonction;

Mais j'ai une erreur de sytaxe, et j'aimerai avoir de l'aide svp, merci.
Configuration: Windows 7
Firefox 3.6

26 réponses

  • 1
  • 2
  1. Nico90
     
    Bonjour, maintenant je n'ai plus la meme erreur, j'ai sytaxe erreur, et je me demande si ce n'est pas les # qui plantent ma requette SQL, merci d'avance pour une réponse rapide et clair.
    0
  2. xsure
     
    Tu as même de grosse erreurs, déja dans ta clause FROM, tu n'as que la table SERVICE alors que tu utilise les tables EMPLOYE et FONCTION dans WHERE.
    pour ta requette, je pense qu'il ne faut utiliser que les tables SERVICE et EMPLOYE
    Essaye ca ca devrait marché :

    SELECT SERVICE.Nomserv, COUNT(Numemp)AS "Nombre d'employés"
    FROM SERVICE, EMPLOYE
    WHERE SERVICE.Numserv=EMPLOYE.Numserv (faut pas mettre le #)
    GROUP BY SERVICE.Nomserv ;

    dit moi si ca marche
    0
  3. Nico90
     
    Bonjour, je te remercie cela fonctionne bien. Mais j'ai d'autre souci avec d'autres de mes requettes, est-ce que tu pourrai m'aider?
    0
  4. xsure
     
    oui pas de problème
    après je connait pas toutes les syntaxes, j'ai étudier le sql dans le cadre de ma license en gestion
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nico90
     
    Fonction pour laquelle il y a plus de 1 employé

    SELECT FONCTION.Numfonction, FONCTION.Libfonction
    FROM EMPLOYE, FONCTION
    GROUP BY EMPLOYE.Numfonction
    HAVING count(*)>1;

    Erreur :l'expression spécifié 'Numfonction' comme partie d'agrégat.

    Liste des fonctions qui ne sont pas utilisées.

    SELECT FONCTION.Numfonction, FONCTION.Libfonction
    FROM EMPLOYE, FONCTION
    GROUP BY EMPLOYE.Numfonction
    HAVING count(*)=0;

    Somme des salaires du service compta

    Erreur :l'expression spécifié 'Numfonction' comme partie d'agrégat.
    SELECT SERVICE.Nomserv, avg(EMPLOYE.salemp)
    FROM EMPLOYE, SERVICE
    WHERE SERVICE.Nomserv='COMPTA';

    Erreur :l'expression spécifié 'Nomserv' comme partie d'agrégat.

    Liste des fonctions qui ne sont pas utilisées

    SELECT FONCTION.Numfonction, FONCTION.Libfonction
    FROM EMPLOYE, FONCTION
    GROUP BY EMPLOYE.Numfonction
    HAVING count(*)=0;

    Erreur :l'expression spécifié 'Numfonction' comme partie d'agrégat.

    Libellé des services dans lequel travaillent plus de 2 employés

    SELECT SERVICE.Nomserv
    FROM SERVICE
    GROUP BY EMPLOYE.Numsev
    HAVING count(*)>2;

    Erreur :l'expression spécifié 'Nomserv' comme partie d'agrégat.

    Noms des employés INFOGRAPHISTES dont le salaire est le plus élevé

    SELECT max(EMPLOYE.Salemp), EMPLOYE.Nomemp
    FROM EMPLOYE, FONCTION
    WHERE FONCTION.Libfonction='INFOGRAPHISTE';

    Erreur :l'expression spécifié 'Nomserv' comme partie d'agrégat.

    Somme des salaires par service

    SELECT SERVICE.Nomserv, avg(EMPLOYE.salemp)
    FROM EMPLOYE, SERVICE
    GROUP BY SERVICE.Numservice;

    Erreur :l'expression spécifié 'Nomserv' comme partie d'agrégat.

    J'aimerai que tu puisse m'aider sur chacune de ces requettes et par ailleurs que tu m'explique pourquoi dans chacune j'ai une erreur d'agrégat, merci beaucoup.
    En attente d'une réponse rapide et clair.
    0
  7. xsure Messages postés 52 Statut Membre 1
     
    Fonction pour laquelle il y a plus d'1 employé :
    SELECT FONCTION.Numfonction, FONCTION.Libfonction
    FROM FONCTION, EMPLOYE
    WHERE FONCTION.Numfonction=EMPLOYE.Numfonction
    GROUP BY FONCTION.Numfonction, FONCTION.Libfonction
    HAVING Count(Numemp)>1
    ;

    erreur :
    -tu as oublier la jointure WHERE
    -GROUP BY doit reprendre les mêmes propriété que SELECT
    -Count(*) compte toutes les lignes de la table, il vaut mieux mettre une propriété car cela va compter dans la table EMPLOYE grace à la propriété Numemp
    0
  8. xsure Messages postés 52 Statut Membre 1
     
    pourrez tu m'envoyer le fichier access pour que je fasse plus alaise (s'il ne contient pas de données confidentielle bien sur) par message privé?
    0
  9. Nico90
     
    Bonjour, oui je peux t'envoyer cela mais est ce que je dois créer un compte sur le site pour t'envoyer mon projet access ou sinon peux tu me dire ton adresse internet? Merci d'avance.
    0
  10. xsure Messages postés 52 Statut Membre 1
     
    xsure@live.fr
    0
    1. Nico90
       
      Bonjour, je viens de t'envoyer le dossier.
      Merci d'avance pour ton aide.
      0
  11. xsure Messages postés 52 Statut Membre 1
     
    le x en minuscule bien sur
    0
  12. xsure Messages postés 52 Statut Membre 1
     
    Somme des salaires du service compta

    SELECT SERVICE.Nomserv, SUM(EMPLOYE.salemp) AS "Total Salaires"
    FROM EMPLOYE, SERVICE
    WHERE SERVICE.Numserv=EMPLOYE.Numserv
    AND SERVICE.Nomserv="COMPTABILITE"
    GROUP BY SERVICE.Nomserv;


    la Somme c'est SUM et t'as oublié la jointure
    normalement ca doit etre ca
    0
  13. xsure Messages postés 52 Statut Membre 1
     
    Libellé des services dans lequel travaillent plus de 2 employés

    SELECT SERVICE.Nomserv
    FROM SERVICE, EMPLOYE
    WHERE SERVICE.Numserv=EMPLOYE.Numserv
    GROUP BY SERVICE.Nomserv
    HAVING Count(Numemp)>2;


    la ca te metrat le nom des services, si tu veut les numéros, remplace SERVICE.Nomserv par SERVICE.Numserv dans SELECT et GROUP BY
    0
  14. xsure Messages postés 52 Statut Membre 1
     
    la requette Noms des employés INFOGRAPHISTES dont le salaire est le plus élevé est contradictoire :
    ESt ce que tu veut l'infographite qui a le salaire le plus élevé ou les infongraphiste classé par ordre décroissant de salaire?
    0
  15. xsure Messages postés 52 Statut Membre 1
     
    Liste des fonctions qui ne sont pas utilisées

    SELECT Numfonction, Libfonction
    FROM FONCTION
    WHERE Nbemp=0;


    la tu n'as besoin que de la table FONCTION car il y a la Propriété Nbemp qui t'indique si la fonction est utilisé ou pas
    0
  16. xsure Messages postés 52 Statut Membre 1
     
    Somme des salaires par service

    SELECT SERVICE.Nomserv, SUM(EMPLOYE.salemp) AS "Total Salaires"
    FROM EMPLOYE, SERVICE
    WHERE SERVICE.Numserv=EMPLOYE.Numserv
    GROUP BY SERVICE.Nomserv;


    C'est quasiment pareil que les salaires du service compta sauf que tu ne précise pas dans WHERE :
    AND SERVICE.Nomserv="COMPTABILITE"

    PS: Le AS dans la clause SELECT permet de renommé la colonne résultat SUM(EMPLOYE.salemp (soucis de présentation)
    0
  17. xsure Messages postés 52 Statut Membre 1
     
    L'infographiste le mieu payé

    SELECT Nomemp, Salemp
    FROM EMPLOYE, FONCTION
    WHERE EMPLOYE.Numfonction=FONCTION.Numfonction
    AND Libfonction="INFORGRAPHISTE"
    AND Salemp=(SELECT MAX(Salemp) FROM EMPLOYE);


    -Dans ta base de donné tu as fais une faute, tu as marqué INFORGRAPHISTE donc dans la requette il faut aussi marqué INFORGRAPHISTE
    -le MAX doit etre une condition donc dans SELECT tu ne mais que Salemp pour qu'il affiche le salaire et en condition AND tu fais une sous selection : salaire = salaire max de la table EMPLOYE qui se traduit par Salemp=(SELECT MAX(Salemp) FROM EMPLOYE)
    0
  18. xsure Messages postés 52 Statut Membre 1
     
    Si tu veut tous les infographiste par ordre de salaire décroissant, c'est :

    SELECT Nomemp, Salemp
    FROM EMPLOYE, FONCTION
    WHERE EMPLOYE.Numfonction=FONCTION.Numfonction
    AND Libfonction="INFORGRAPHISTE"
    ORDER BY Salemp DESC;
    0
  19. xsure Messages postés 52 Statut Membre 1
     
    J'espere que tout a bien fonctionné, confirme moi,
    merci
    0
  20. Nico90
     
    Bonjour, oui je vais tester çà tout de suite, je te remercie par avance de l'aide que tu m'a apporter.
    0
  • 1
  • 2