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 :

Produit cartesien dans une requete


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut Produit cartesien dans une requete
    M, bonjour

    je galére sur une requete avec des SUM

    voici le probleme:

    2 Tables : Entree et Sortie

    Table Entree Champ "Ref produit", Date , "Qte entree"
    Table Sortie Champ "Ref produit", Date , "Qte sortie"

    j' effectue une requete SQL sur ces tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select E."Ref produit" , Sum(E."Qte entree" ) as QteEntree , Sum(S."Qte entree" ) as QteSortie , (Sum(E."Qte entree" ) - Sum(S."Qte sortie" )) As EtatStock
    From Entree E , Sortie S
    Where E."Ref produit" = S."Ref produit"
    me donne un resultat aberrant

    je pense que le requete effectue un produit cartesien , mais malgres des recherches dans mes books , je ne trouve pas la solution

    si quelq'un auait la gentilesse de m' aider

    Fred

    merci

  2. #2
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,

    La pk est sur ("Ref produit",Date) et non sur ("Ref produit"), exact ?
    Si tel est le cas, il va effectivement falloir procéder avec 2 sous-requêtes.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 400
    Points
    28 400
    Par défaut
    En effet, ton résultat ne doit pas correspondre à tes attentes.
    Déjà, il manque une clause GROUP BY...
    Ensuite, compte tenu de la structure de tes tables, il te faut passer par une sous-requête.
    Enfin, l'utilisation des jointures normalisées rendra ta requête plus lisible.
    Par ailleurs, la norme SQL n'accepte pas les espaces dans les nom d'objets.

    Voici une solution :
    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
    select    E.Ref_produit 
        ,    SUM(E.Qte_entree) AS QteEntree 
        ,    S.QteSortie 
        ,     (SUM(E.Qte_entree) - S.Qte_sortie) AS EtatStock 
    from    Entree AS E
        inner join
            (    select    Ref_produit
                    ,    SUM(S.Qte_sortie) AS QteSortie
                from    Sortie
                group by
                        Ref_produit
            ) AS S 
    where    E.Ref_produit = S.Ref_produit
    group by
            E.Ref_produit
    ;

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    Merci de votre réponse

    mais cela ne fonctionne pas , message d' erreur

    "Utilisation incorrecte du mot clé"

    petite precision , je suis en paradox 7.5

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 400
    Points
    28 400
    Par défaut
    A première vue, je ne vois pas d'autre moyen de résoudre le problème qu'en passant par une table dérivée (appelée aussi sous-requête).

  6. #6
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    comment cela ?

  7. #7
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Qu'est-ce qui ne passe pas ?
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      E."Ref produit" , 
      E.QteEntree , 
      S.QteSortie , 
      E.QteEntree - S.QteSortie AS EtatStock
    FROM 
      (select "Ref produit", sum("Qte entree") AS QteEntree from Entree group by "Ref produit") E , 
      (select "Ref produit", sum("Qte sortie") AS QteSortie from Sortie group by "Ref produit") S 
    WHERE E."Ref produit" = S."Ref produit"
    ou, idem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      E."Ref produit" , 
      E.QteEntree , 
      S.QteSortie , 
      E.QteEntree - S.QteSortie AS EtatStock
    FROM 
      (select "Ref produit", sum("Qte entree") AS QteEntree from Entree group by "Ref produit") E INNER JOIN
      (select "Ref produit", sum("Qte sortie") AS QteSortie from Sortie group by "Ref produit") S 
        ON E."Ref produit" = S."Ref produit"

    ou, a mon avis meilleur fonctionnellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      E."Ref produit" , 
      E.QteEntree , 
      S.QteSortie , 
      E.QteEntree - (CASE WHEN S.QteSortie is null THEN 0 ELSE S.QteSortie END) AS EtatStock
    FROM 
      (select "Ref produit", sum("Qte entree") AS QteEntree from Entree group by "Ref produit") E LEFT OUTER JOIN
      (select "Ref produit", sum("Qte sortie") AS QteSortie from Sortie group by "Ref produit") S 
        ON E."Ref produit" = S."Ref produit"

  8. #8
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Je me permets de modifier la dernière alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      E."Ref produit" , 
      E.QteEntree , 
      S.QteSortie , 
      E.QteEntree - ISNULL(S.QteSortie ,0) AS EtatStock
    FROM 
      (SELECT "Ref produit", sum("Qte entree") AS QteEntree FROM Entree GROUP BY "Ref produit") E LEFT OUTER JOIN
      (SELECT "Ref produit", sum("Qte sortie") AS QteSortie FROM Sortie GROUP BY "Ref produit") S 
        ON E."Ref produit" = S."Ref produit"

Discussions similaires

  1. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  2. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25
  3. test la valeur d'une date dans une requete
    Par TuxP dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 14h53
  4. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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