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 :

Aide pour une requête sur deux tables


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut Aide pour une requête sur deux tables
    Je dois travailler sur la base SAGE SQL V14 sous SQL Server et realiser des stat, inventaires etc.
    Dans l'un de mes requêtes, je dois regarder les articles en stock et en même temps les qté vendu au jour J si il y ait vente et 0 sinon. Or ma requête ne me retourne que les articles en stock qui ont eu des ventes.
    Voici la requête :
    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
    23
    24
    25
    26
     
    SELECT     
     F_ARTSTOCK.AR_Ref, 
     F_ARTICLE.AR_Design,
     F_ARTICLE.FA_CodeFamille,
     F_DEPOT.DE_Intitule, 
     F_ARTSTOCK.AS_QteMini, 
     F_ARTSTOCK.AS_QteSto,
     (F_ARTSTOCK.AS_QteMini - F_ARTSTOCK.AS_QteSto) as AS_QteTransfert,
     COUNT(F_DOCLIGNE.DL_Qte) as QteVendu
    FROM         F_ARTSTOCK 
    INNER JOIN F_ARTICLE ON F_ARTICLE.AR_Ref = F_ARTSTOCK.AR_REF
    INNER JOIN F_DEPOT ON F_DEPOT.DE_No = F_ARTSTOCK.DE_No
    LEFT OUTER JOIN F_DOCLIGNE ON (F_DOCLIGNE.Ar_Ref = F_ARTSTOCK.AR_Ref  and F_DOCLIGNE.DE_No = F_ARTSTOCK.DE_No)
    WHERE    
    (F_ARTSTOCK.AS_QteMini > F_ARTSTOCK.AS_QteSto) AND
    (F_ARTSTOCK.DE_No = 1) AND
    (F_DOCLIGNE.DO_Type in(3,6,7,30)) AND
    (F_DOCLIGNE.Do_Date = '06/10/2007')
    GROUP BY 
    F_ARTSTOCK.AR_Ref, 
    F_ARTICLE.AR_Design, 
    F_ARTICLE.FA_CodeFamille, 
    F_DEPOT.DE_Intitule, 
    F_ARTSTOCK.AS_QteMini, 
    F_ARTSTOCK.AS_QteSto
    Voila.
    On progresse .....

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Coucou,

    Tu as bien mis un left join sur F_DOCLIGNE c'est ce qu'il fallait mais dans ton on il fallait mettre tous les critères portant sur F_DOCLIGNE.
    D'autres part es-tu sur qu'il faille faire un count sur F_DOCLIGNE.DL_Qte et pas un sum.
    Voilà ce que je suggère en tenant compte des deux remarques
    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
    23
    24
    25
    26
    27
    28
    29
    30
    SELECT     
    	 F_ARTSTOCK.AR_Ref, 
    	 F_ARTICLE.AR_Design,
    	 F_ARTICLE.FA_CodeFamille,
    	 F_DEPOT.DE_Intitule, 
    	 F_ARTSTOCK.AS_QteMini, 
    	 F_ARTSTOCK.AS_QteSto,
    	 (F_ARTSTOCK.AS_QteMini - F_ARTSTOCK.AS_QteSto) AS AS_QteTransfert,
    	 SUM(COALESCE(F_DOCLIGNE.DL_Qte,0)) AS QteVendu
    FROM         F_ARTSTOCK 
    	INNER JOIN F_ARTICLE ON F_ARTICLE.AR_Ref = F_ARTSTOCK.AR_REF
    	INNER JOIN F_DEPOT 
    		ON F_DEPOT.DE_No = F_ARTSTOCK.DE_No
    	LEFT OUTER JOIN F_DOCLIGNE 
    		ON (F_DOCLIGNE.Ar_Ref = F_ARTSTOCK.AR_Ref  
    			AND F_DOCLIGNE.DE_No = F_ARTSTOCK.DE_No 
    			and (F_DOCLIGNE.Do_Date = '06/10/2007')
    			AND (F_DOCLIGNE.DO_Type IN(3,6,7,30)
    		   ) 
    WHERE    
    	(F_ARTSTOCK.AS_QteMini > F_ARTSTOCK.AS_QteSto) AND
    	(F_ARTSTOCK.DE_No = 1) 
     
    GROUP BY 
    	F_ARTSTOCK.AR_Ref, 
    	F_ARTICLE.AR_Design, 
    	F_ARTICLE.FA_CodeFamille, 
    	F_DEPOT.DE_Intitule, 
    	F_ARTSTOCK.AS_QteMini, 
    	F_ARTSTOCK.AS_QteSto
    A+
    Soazig

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Bonjour,
    Citation Envoyé par soazig Voir le message
    Coucou,

    Tu as bien mis un left join sur F_DOCLIGNE c'est ce qu'il fallait mais dans ton on il fallait mettre tous les critères portant sur F_DOCLIGNE.
    D'autres part es-tu sur qu'il faille faire un count sur F_DOCLIGNE.DL_Qte et pas un sum.
    Voilà ce que je suggère en tenant compte des deux remarques[code]Soazig
    Bravo Soazig.
    Remarque très pertinente pour le SUM au lieu du COUNT et sur le COALESCE.
    Je vais de ce pas le tester et voir ce que cela donne.
    Je te remercie beaucoup

    A+
    On progresse .....

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

Discussions similaires

  1. [MySQL-5.6] Faire une requête sur deux tables pour avoir la valeur MAX sans le GROUP BY
    Par emykev22 dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/06/2014, 12h12
  2. Aide pour une requête sur deux tables
    Par Andry dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/11/2007, 07h14
  3. [Access] Fonction TOP dans une requête sur deux tables
    Par pc75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/07/2007, 09h31
  4. Aide pour une requête sur Access
    Par psgkiki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/05/2007, 11h34
  5. Aide pour une requête sur Access
    Par psgkiki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/05/2007, 11h33

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