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 :

SUM et sous requête


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut SUM et sous requête
    Bonjour,

    j'ai un petit soucis avec l'élaboration d'une de mes requêtes.
    Voila la situation de départ;
    Je dispose de 5 tables :
    -chantier (avec le nom, la description, id_client)
    -ouvrier(nom, fonction)
    -client (nom, adresse)
    -table de liaison chantier_ouvrier

    dans ma table de liaison chantier_ouvrier se trouve un champ heure prestée
    en fonction du chantier et une clé primaire composée de l'id chantier et de l'id ouvrier.

    Je bloque au moment d'afficher la liste des chantiers.
    Je souhaiterai avoir une colonne additionnant les heures passées par l entreprise sur le chantier.
    En clair je souhaiterai effectuer la somme du champs nombre_heure pour un chantier donné pour tous les ouvriers en une seule requête.

    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nom chantier | Description          | Nom client | heures effectuées (SUM) |
    --------------------------------------------------------------------------
    ILD02          maison 2etages         Robert                      65
    IMO06          commerce               Michel                      40
    ...
    J'ai essayé plusieurs requete sans le moindre succes du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Chantier.Nom,Chantier.Description, Client.Nom, SUM(heure) as total 
    FROM Chantier 
    INNER JOIN Client ON Chantier.id_client = Client.id 
    INNER JOIN chantier_ouvrier ON Chantier.id = chantier_ouvrier.id_chantier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Chantier.Nom,Chantier.Description, Client.Nom, 
               (SELECT SUM(heure) as total 
                FROM chantier_ouvrier 
                WHERE id_chantier = Chantier.id) 
    FROM Chantier 
    INNER JOIN Client ON Chantier.id_client = Client.id
    Merci d'avance pour l'aide que vous pourrez m'apporter

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Citation Envoyé par thriller Voir le message
    J'ai essayé plusieurs requete sans le moindre succes du genre
    Sans succès... avec des résultats ne correpondant pas ou avec un message d'erreur ?
    S'il y a un message, quel est-il ?
    Quel SGBD utilises-tu ?

    Habituellement, les fonctions de regroupement (COUNT, SUM, ...) doivent être associées à une clause GROUP BY. Elle n'apparait pas dans tes requêtes.

    Tu pourras utilement étudier ce document pour mieux comprendre l'usage des ces clauses et fonctions dans une requête.
    Groupage, ensembles et sous ensembles
    par Frédéric Brouard
    Le GROUP BY et opérations ensemblistes.

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par thriller Voir le message
    J'ai essayé plusieurs requete sans le moindre succes du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Chantier.Nom,Chantier.Description, Client.Nom, SUM(heure) as total 
    FROM Chantier 
    INNER JOIN Client ON Chantier.id_client = Client.id 
    INNER JOIN chantier_ouvrier ON Chantier.id = chantier_ouvrier.id_chantier
    Sans le moindre succès, ça veut dire quoi ? Pas les bons résultats, une erreur, ...? Essaie d'être précis, si tu veux être aidé efficacement, personne n'a envie de jouer aux devinettes
    Ceci dit, il me semble qu'à ta requête manque tout simplement la clause GROUP BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Chantier.Nom,Chantier.Description, Client.Nom, 
    SUM(chantier_ouvrier.heure) as total 
    FROM Chantier 
    INNER JOIN Client ON Chantier.id_client = Client.id 
    INNER JOIN chantier_ouvrier ON Chantier.id = chantier_ouvrier.id_chantier
    GROUP BY Chantier.Nom,Chantier.Description, Client.Nom

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Pour une des requêtes testées j'avais un message d'erreur me spécifiant la clause GROUP BY, pour une autre il m'additionnait le nombre total de toutes les heures de tous les chantiers se trouvant dans la table.

    J'utilise SQL Server 2005

    Effectivement après avoir lu -calmement - les infos du liens donné par al1_24 j'ai un peu mieux compris la notion de GROUP BY et comme l'a dit rsc il me manquait juste le GROUP BY.

    Merci de pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SUM + sous requête
    Par jalalnet dans le forum Développement
    Réponses: 23
    Dernier message: 17/06/2011, 19h42
  2. un SUM + sous-requête pour remplacer une boucle itérative
    Par forzaxelah dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2009, 23h16
  3. SUM, CASE, GROUP BY et sous requête
    Par wisrou dans le forum SQL
    Réponses: 2
    Dernier message: 13/02/2008, 14h19
  4. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/03/2004, 00h20
  5. Réponses: 3
    Dernier message: 18/05/2003, 01h16

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