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 :

Enlever doublon dans requête somme


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut Enlever doublon dans requête somme
    bonjour

    je recherche de l aide sur cette requete.

    j ai deux tables:

    table1
    colis    article    qté 
    1    a    1 
    1    b    1 
    1    c    1 
    2    d    1
    table2
    colis    article    commentaires 
    1    a    vv 
    1    b    pp 
    1    c    mm 
    2    d    ll
    je fais cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT                            
     
    table1.colis,                            
    table1.article,                            
    table1.qté                            
    table2.commentaires                            
     
    FROM                            
     
    table1                            
     
    LEFT JOIN table2 on (table1.colis = table2.colis AND table1.article = table 2.article)
    et j obtiens:

    colis    article    commentaires    qté     
    1    a        1    vv 
    1    b        1    pp 
    1    c        1    mm 
    2    d        1    ll 
    1    a        1    vv 
    1    b        1    pp 
    1    c        1    mm 
    1    a        1    vv 
    1    b        1    pp 
    1    c        1    mm
    j'aimerais obtenir:

    colis    article    commentaires    qté  1    a        1    vv 
    1    b        1    pp 
    1    c        1    mm 
    2    d        1    ll
    Pouvez vous m'aider?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 451
    Par défaut
    Bonjour,
    DISTINCT permet de supprimer les doublons dans le résultat de la requête.
    Par contre vu les données que tu nous montres, la requête ne devrait pas renvoyer de doublons...

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    J ai du mal précisé mon cas, je vais le refaire avec les vrais données:

    j ai une table1 qui contient les champs/valeurs:
    colis/1
    article/a
    qté/10

    soit une ligne.

    j ai une table2 qui contient les champs/valeurs:
    colis/1/1
    article/a/a
    commentaires/vv/vv
    soit 2 lignes.

    Je veux afficher la qté pour le colis "1" et l'article "a" et le commentaire attachéL le resultat souhaité est donc:

    colis/1
    article/a
    qté/10
    commentaires/vv
    mais j'obtiens:

    colis/1
    article/a
    qté/40
    commentaires/vv
    ma requête est le suivante:
    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
     
    table1.colis,
    table1.article,
    sum(table1.qté),
    t2.commentaires
     
    FROM
     
    table1
     
    left JOIN table2 AS t2 on table1.article = t2.article
    left JOIN table2 AS tt2 on table1.colis = tt2.colis
     
    group by
    table1.colis,
    table1.article,
    t2.commentaires
    "

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    bonjour,

    quelqu'un aurait une solution sur ce cas un peu special?

    merci
    Cedric

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Il y a des doublons (et donc une somme erronée) parce que tu as fait une double jointure sur la même table, alors que tu peux n'en faire qu'une seule :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT	 t1.Colis
    	,t1.Article
    	,SUM(t1.Quantite)
    	,t2.Commentaires
    FROM table1 AS t1
    	LEFT JOIN table2 AS t2 on t1.Article = t2.Article
    WHERE t1.Colis = t2.Colis
    GROUP BY t1.Colis, t1.Article, t2.Commentaires

    [EDIT] Un peu de lecture pour approfondir sur les jointures : http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    merci, ça améliore mais ça ne marche pas entièrement, ça me donne encore des doublons avec une somme = a 20 au lieu de 10.

    par contre j ai trouvé la solution dans un tuto sur ce site, il faut mettre le distinct DANS la fonction sum.
    voici le code modifié qui marche ;-):

    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
    SELECT
     
    table1.colis,
    table1.article,
    sum(distinct table1.qté),
    t2.commentaires
     
    FROM
     
    table1
     
    left JOIN table2 AS t2 on table1.article = t2.article
    left JOIN table2 AS tt2 on table1.colis = tt2.colis
     
    group by
    table1.colis,
    table1.article,
    t2.commentaires;

    voici le lien du tuto: ftp://ftp-developpez.com/oracle/guide/SQL.pdf


    en tout cas merci pour les conseils ;-)
    ceci était un cas un peu simplifié je vais maintenant essayer sur la BDD de mon entreprise (SQL oracle).

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    ça, ça marche...

    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
    SELECT
    table1.colis,
    table1.article,
    sum(table1.qté),
    tt2.commentaires
     
    FROM
     
    table1
     
    left JOIN (SELECT DISTINCT concat(table2.colis,table2.article) AS cc2,
     
                    table2.commentaires
                    FROM table2) AS tt2 
    ON concat(table1.colis,table1.article) = tt2.cc2
     
    GROUP BY
     
    table1.colis,
    table1.article,
    tt2.commentaires

Discussions similaires

  1. [MySQL-5.1] Doublon dans requête
    Par cedriclv dans le forum Requêtes
    Réponses: 6
    Dernier message: 15/06/2013, 01h46
  2. enlever doublon par requête ou sql
    Par marcmarc150 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/09/2010, 07h16
  3. doublon dans requête état de présences
    Par papagei2 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 06/02/2008, 13h38
  4. MySQL enlever doublons dans table
    Par MCSalsa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/06/2007, 21h18
  5. doublon dans requête
    Par zut94 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/08/2006, 15h13

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