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

SQL Oracle Discussion :

Somme multipliée par deux lors d'une jointure


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2010
    Messages : 135
    Par défaut Somme multipliée par deux lors d'une jointure
    Bonjour,

    J'ai un problème de requête SQL que je n'arrive pas à résoudre.

    J'ai une vue contenant les champs:
    Qté_livrée Année_liv Code_client
    1.05 2008 001
    2.85 2009 002

    Et j'ai une table contenant les champs:
    Code_client1 Code_client2
    00 1
    00 2

    Mon problème est le suivant:

    Quand je fais le sql suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sum(Qté_livrée) from Table1 where Code_client = '001'
    Je tombe sur 1.05

    Mais quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT SUM(Qté_livrée) 
    FROM
      Table1,
      Table2
    WHERE
        (Table1.Code_client=Table2.Code_client1||Table2.Code_client2)
    AND (Table1.Code_client1||Table2.Code_client2=  '001' )
    Je tombe sur 2.1 ! => La quantité livrée est multipliée par 2 !

    Comment faire pour résoudre ce problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Ta requête n'est pas très correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(Qté_livrée)
    FROM Table1, Table2
    WHERE Table1.Code_client = CONCAT(Table2.Code_client1,Table2.Code_client2)
    AND Table1.Code_client='001'
    Tu as des () en trop, des = de trop...

  3. #3
    Membre confirmé
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2010
    Messages : 135
    Par défaut
    Tu as raison, je l'ai corrigé maintenant. C'était juste un problème de mauvais copier/coller quand j'ai posté mon message dans le forum.... Désolée !

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Que donne la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Code_client, CONCAT(Table2.Code_client1,Table2.Code_client2), SUM(Qté_livrée)
    FROM Table1, Table2
    WHERE Table1.Code_client = CONCAT(Table2.Code_client1,Table2.Code_client2)
    GROUP BY Code_client, CONCAT(Table2.Code_client1,Table2.Code_client2)

  5. #5
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 878
    Billets dans le blog
    3
    Par défaut
    Je n'arrive pas à reproduire l'erreur, j'ai le bon résultat.

    Es-tu sûre que tu n'as pas rentré deux fois ton jeu de données dans l'une ou l'autre des tables ? Typiquement quand lors d'une jointure le résultat est doublé (somme, count...) c'est simplement parce qu'il y a... des doublons dans l'une des tables, et donc un produit cartésien.
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  6. #6
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Citation Envoyé par Glutinus Voir le message
    Je n'arrive pas à reproduire l'erreur, j'ai le bon résultat.

    Es-tu sûre que tu n'as pas rentré deux fois ton jeu de données dans l'une ou l'autre des tables ? Typiquement quand lors d'une jointure le résultat est doublé (somme, count...) c'est simplement parce qu'il y a... des doublons dans l'une des tables, et donc un produit cartésien.
    Ou qu'il manque une condition de jointure !!!!!

  7. #7
    Membre confirmé
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2010
    Messages : 135
    Par défaut
    Merci pour vos réponses.

    Je vais ajouter plus de précisions si ça peut aider ...

    Mes deux tables (une vue et une table) sont utilisées dans un univers BO avec la jointure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vue.Code_client=Table.Code_client1||Table.Code_client2
    Quand je veux créer un rapport BO avec les Objets de ma vue uniquement :
    Qté_livrée et Code_client = '001' , j'ai le résultat 1.05.

    Si j'ajoute un objet provenant de ma table, par exemple le Nom_client, j'ai la quantité livrée multipliée par 2!

    Ci-joint un exemple de vraies données de ma vue.

    Je me dis que c'est ma jointure qui pose problème ! mais je ne vois pas comment le résoudre!
    Images attachées Images attachées  

Discussions similaires

  1. [XSLT] CDATA par défaut lors d'une transformation xsl
    Par thierry_b dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/12/2008, 13h57
  2. Obtenir un COUNT() = 0 lors d'une jointure ?
    Par elvex dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/07/2007, 21h48
  3. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  4. Eviter la coupure d'un tableau en deux lors d'une impression
    Par zidrouz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 15/06/2006, 11h26

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