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

MS SQL Server Discussion :

Requête sur trois tables avec deux sommes


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête sur trois tables avec deux sommes
    bonjour, j'essais sans cesse de faire un REQ sur 3 tables A,B, C

    Composition des tables :
    A = valeur unique
    B = Nvaleur, ( je veux la somme)
    C = Nvaleur, ( je veux la somme)
    Avec quelques criteres dans le "Where" naturellement
    =====================================
    J'ai beau essayer de tout bord mais rien a faire
    J'ai le bon résultat si je demande un critère précis dans la Table A seulement
    Si je demande une borne de date dans la table B par exemple, le résultat est invalidé ( EX: 200,000 ligne au lien de 200)

    Ma réponse réelle a environ 600 lignes seulement.
    Voila le plus loin que je me suis rendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT     JOB00101.ProjctID, JOB00101.CUSTNMBR, JOB00101.SHORTPROJECTNAME, sum(JOB40115.HourlyBudget), sum(JOB30002.Hours), JOB30002.PSTGDATE
     
    FROM         JOB00101 INNER JOIN
                          JOB30002 ON JOB00101.ProjctID = JOB30002.ProjctID INNER JOIN
                          JOB40115 ON JOB00101.ProjctID = JOB40115.ProjctID
     
    WHERE       (JOB30002.PSTGDATE BETWEEN '2012-06-01' AND  '2013-05-31') AND
                      (substring(JOB40115.ProjctID,1,2) <>  '00' AND       substring(JOB40115.ProjctID,4,1) <> '5' )
     
     
    GROUP BY JOB00101.ProjctID, JOB30002.PSTGDATE, JOB00101.CUSTNMBR, JOB00101.SHORTPROJECTNAME
    order by projctid
    Quelqu'un a des idées ?


    gpz1963@hotmail.com

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Il faut décomposer vos agrégats :
    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
    WITH JOB30002_agg (ProjctID, Hours_sum) AS
    (
      SELECT ProjctID, sum(Hours)
        FROM JOB30002
       WHERE PSTGDATE BETWEEN '2012-06-01' AND '2013-05-31'
    GROUP BY ProjctID
    )
      ,  JOB40115_agg (ProjctID, HourlyBudget_sum) AS
    (
      SELECT ProjctID, sum(HourlyBudget)
        from JOB40115
       WHERE ProjctID not like '00%'
         AND substring(ProjctID, 4, 1) <> '5'
    GROUP BY ProjctID
    )
      SELECT j1.ProjctID, j1.CUSTNMBR, j1.SHORTPROJECTNAME
           , j2.Hours_sum
           , j5.HourlyBudget_sum
        FROM JOB00101     AS j1
        JOIN JOB30002_agg AS j2 ON j2.ProjctID = j1.ProjctID
        JOIN JOB40115_agg AS j5 ON j5.ProjctID = j1.ProjctID
    ORDER BY j1.ProjctID ASC;
    Je n'ai volontairement pas remonté le PSTGDATE dans la première requête, car je ne sais pas comment vous souhaitez répartir (ou dupliquer) les données HourlyBudget selon cet axe.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut CA MARCHE :)
    Merci beaucoup.
    Je ne connaissais pas la commande "with"
    J,ai aussi ajusté une ligne ou deux pour le nom de mes tables
    la tout fonctionne, merci encore

    Code SQL : 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
    WITH JOB30002_agg (ProjctID, Hours_sum) AS
    (
      SELECT ProjctID, sum(Hours)
        FROM JOB30002
       WHERE PSTGDATE BETWEEN '2012-06-01' AND '2013-05-31'
    GROUP BY ProjctID
    )
      ,  JOB40115_agg (ProjctID, HourlyBudget_sum) AS
    (
      SELECT ProjctID, sum(HourLYBUDGET)
        FROM JOB40115
       WHERE ProjctID NOT LIKE '00%'
         AND substring(ProjctID, 4, 1) <> '5'
    GROUP BY ProjctID
    )
      SELECT j1.ProjctID, j1.CUSTNMBR, j1.SHORTPROJECTNAME
           , j2.Hours_sum
           , j5.HourlyBudget_sum
        FROM JOB00101     AS j1
        JOIN JOB30002_agg AS j2 ON j2.ProjctID = j1.ProjctID
        JOIN JOB40115_agg AS j5 ON j5.ProjctID = j1.ProjctID
    ORDER BY j1.ProjctID ASC;

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

Discussions similaires

  1. Requête sur 2 tables avec critères de jointures particuliers
    Par Randomdev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2009, 18h00
  2. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 08h50
  3. Réponses: 4
    Dernier message: 05/03/2008, 09h32
  4. problème sur requête sur 3 tables avec une somme
    Par tomguiss dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/12/2007, 16h44
  5. Une requête sur trois tables
    Par momoG dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/08/2007, 17h00

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