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 :

Jointure de 3 tables avec sommes des données dans 2 [2005]


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Jointure de 3 tables avec sommes des données dans 2
    Bonjour,

    Je n'arrive pas à résoudre le problème suivant :

    Il faut créer 2 jointures avec une table de base T1 (son champ REF contient plus de lignes) : la première va chercher des stocks T2, la seconde des ventes T3.
    Au final je veux avoir une ligne par REF avec un cumul des stocks et des ventes.

    Voici le code :

    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
    SELECT
    T1.REF AS REF,
    T2.STOCK AS QTY, -- si je mets cela dans une agregation SUM() et adapte GROUP BY en fonction, ça me fait des totaux complètement erronées
    SUM(CASE WHEN T3.DATE BETWEEN GETDATE()-90 AND GETDATE() THEN ABS(T3.QTY)/3 END) AS VM3M
    
    FROM
    T1
    LEFT JOIN T2 ON T2.REF = T1.REF
    LEFT JOIN T3 ON T3.REF = T1.REF
    
    WHERE
    -- plusieurs filtres dans T1, T2 et T3
    
    GROUP BY
    T1.REF,
    T2.STOCK

    Voici le résultat :
    Nom : Capture 2.PNG
Affichages : 323
Taille : 8,8 Ko

    Les bons chiffres sont : 9991 pour QTY et 5776 pour VM3M.

    Comment pourrais-je faire pour qu'il n'y ait qu'une seule ligne ?
    REF-------------QTY-------------VM3M
    2003-----------9991-------------5776


    Je vous remercie !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 810
    Points
    30 810
    Par défaut
    Pas le choix, il faut calculer l'un des regroupements dans une table dérivée.
    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
    SELECT  t1.ref  AS ref
        ,   t_2.qty
        ,   SUM(CASE WHEN t3.date BETWEEN GETDATE() - 90 AND GETDATE() THEN ABS(t3.qty) / 3 END) AS vm3m
    FROM    t1
    LEFT JOIN 
            (   SELECT  t2.ref
                    ,   SUM(t2.stock)   AS  qty
                FROM    t2
                WHERE   t2.col  = valeur    --  Filtre sur t2
                GROUP BY t2.ref
            )   t_2 
            ON  t_2.ref = t1.ref
    LEFT JOIN 
            t3 
            ON  t3.ref  = t1.ref
            AND t3.col  = valeur    --  Filtre sur t3
    WHERE   t1.col  = valeur    -- Filtre sur t1
    GROUP BY t1.ref
        ,   t_2.qty
    ;
    Attention, lorsqu'on place une restriction sur une colonne d'une table liée par une jointure externe, on force la jointure en jointure stricte (à moins bien sûr que la restriction soit de la forme colonne is null )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, cela fonctionne parfaitement bien !

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

Discussions similaires

  1. [Débutant] problème avec insertion des données dans sqlServer
    Par Invité dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/05/2012, 10h45
  2. [Data] problème avec l’enregistrement des données dans ma base
    Par yous18 dans le forum Spring
    Réponses: 2
    Dernier message: 13/04/2012, 13h50
  3. Réponses: 12
    Dernier message: 06/08/2010, 15h00
  4. mettre fichiers avec déjà des données dans répertoire
    Par petitange_lili dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 08h23
  5. Réponses: 4
    Dernier message: 19/09/2005, 15h59

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