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

Développement SQL Server Discussion :

SUM sur plusieurs tables


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut SUM sur plusieurs tables
    Bonjour,

    Je développe une application et je souhaiterais indiquer le nombre d'heures que le salarié a passé sur une machine de production après sa déclaration. J'ai 3 formulaires donc 3 insertions dans des tables différentes et je souhaiterais faire la somme de 3 champs dans des tables différentes. J'ai essayé ma requête mais celle-ci me retourne de mauvaises valeurs c'est pourquoi je me tourne vers vous.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM(MOD_DMO.Tpsmo + MOD_AccomRecou.TpsMo + MOD_Travail.TempsMo ) AS cumul_journalier
    FROM MOD_DMO
    JOIN MOD_AccomRecou on MOD_DMO.Operateur = MOD_AccomRecou.Operateur
    JOIN MOD_Travail  on MOD_DMO.Operateur = MOD_Travail.operateur
    WHERE MOD_DMO.Operateur = '60216004' /** matricule de l'operateur**/
    AND MOD_DMO.Dates='03/01/2017' /**date de la saisie**/
    Merci d’avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut
    Ton opérateur '60216004' a des valeurs dans les 3 tables, en faisant ta jointure tu fais la somme sur le produit cartésien des trois tables. Tu dois avoir une plus grande valeur que prévu

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Utilisez UNION ALL pour concaténer les durées des différentes tables et faites la somme sur la table dérivée résultante.

    REMARQUE : le fait de trouver des durées à cumuler dans trois tables différentes montre à l'évidence un défaut de modélisation.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut
    Bonjour,

    merci pour votre réponse , oui effectivement l’opérateur est présent dans deux tables. Sachant qu'il peut être présent dans les trois tables ou dans qu'une seule table. Quand j’exécute ma requête sql server me retourne null alors qu'il existe bien des valeurs dans deux table.

    Merci de votre aide

    Nom : sum.PNG
Affichages : 3320
Taille : 14,6 Ko

    table 1:
    Nom : table1.PNG
Affichages : 2440
Taille : 3,6 Ko

    table2:
    Nom : table2.PNG
Affichages : 2423
Taille : 4,0 Ko

  5. #5
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut
    merci de votre réponse SQLpro , je vais regarder avec UNION ALL.

  6. #6
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut
    Mais comment créer une table dérivée ou avez vous une syntaxe ? avec ma requête j'ai réussi à sélectionner ce que je voulais mais comment faire mon sum ?

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MOD_DMO.Dates,MOD_DMO.Operateur,MOD_DMO.Tpsmo  from MOD_DMO where Operateur='60012000' and Dates='04/01/2017'
    union all 
    SELECT MOD_AccomRecou.Dates,MOD_AccomRecou.Operateur,MOD_AccomRecou.TpsMo from MOD_AccomRecou where Operateur='60012000' and Dates='04/01/2017'
    union all 
    SELECT MOD_Travail.Dates, MOD_Travail.Operateur,MOD_Travail.TempsMo from MOD_Travail where Operateur='60012000' and Dates='04/01/2017'
    SELECT SUM() as cumul_journalier

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut
    c'est sûr qu'en faisant : SELECT SUM() as cumul_journalier tu auras beaucoup de valeurs

    tu peux faire la somme dans chacune de tes tables et ensuite faire une jointure entre les résultats de tes trois requêtes.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select operateur, sum(TempsMo) as temps1
    from table1
    group by operateur
    Tu fais la même chose avec les autres tables ensuite tu fais une jointure avec le résultat comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select temps1 + temps2 + coalesce(temps3, 0)
    from
    (
    ...
    ) req1 join 
     (
    ...
    ) req2 on req1.operateur=req2.operateur
    left join 
    (
    ...
    ) req3 on req1.operateur=req3.operateur
    where req1.operateur='60012000'

    Tu as compris qu'il fallait mettre l'exemple de requête dans les ...

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

Discussions similaires

  1. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 12h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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