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 :

problème de doublons


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut problème de doublons
    Bonjour à tous,

    j'ai un problème de doublons, malgré que j'utilise la fonction distinct

    merci de votre aide

    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
     
    SELECT
        DISTINCT
        DONNEUR.ID,
        DONNEUR.NOM,
        SUM(DON.DON) AS DONNEE,
        SUM(PROMESSE.DON) AS A_DONNEE
    FROM DONNEUR
       LEFT OUTER JOIN PROMESSE  ON (DONNEUR.ID = PROMESSE.ID_DONNEUR)
       LEFT OUTER JOIN DON ON (PROMESSE.ID = DON.ID_PROMESSE)
       LEFT OUTER JOIN PROMESSE_ANNULER ON (PROMESSE.ID = PROMESSE_ANNULER.ID_PROMESSE)
    WHERE 
       (
          (PROMESSE.ID < 100)     
         AND
          (PROMESSE.ID NOT IN (SELECT ID_PROMESSE FROM PROMESSE_ANNULER))
     
       )
     
    GROUP BY DONNEUR.ID,DONNEUR.NOM, PROMESSE.DON
     
    HAVING
      (PROMESSE.DON > COALESCE( SUM (DON.DON),0))
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il y a la requête, le modèle, il manque ce que vous voulez en faire, un jeu de données et le résultat attendu.
    En attendant, voici quelques corrections :
    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
        DONNEUR.ID,
        DONNEUR.NOM,
        SUM(COALESCE(DON.DON, 0)) AS DON,
        SUM(COALESCE(PROMESSE.DON, 0)) AS PROMESSE
    FROM
        DONNEUR
        LEFT OUTER JOIN PROMESSE
          ON PROMESSE.ID_DONNEUR = DONNEUR.ID
         AND PROMESSE.ID < 100
        LEFT OUTER JOIN DON
          ON DON.ID_PROMESSE = PROMESSE.ID
    WHERE 
        NOT EXISTS (SELECT NULL FROM PROMESSE_ANNULER
                    WHERE PROMESSE_ANNULER.ID_PROMESSE = PROMESSE.ID)
    GROUP BY
        DONNEUR.ID,
        DONNEUR.NOM
    HAVING
        SUM(COALESCE(PROMESSE.DON, 0)) > SUM(COALESCE(DON.DON, 0))

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    En plaçant PROMESSE.DON dans le GROUP BY, il peut en effet y avoitr des doublons.
    Ne connaissant pas les cardinalités, la requête pourrait ressembler à ça :
    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
    SELECT     dnr.id
        ,    dnr.nom
        ,    COALESCE(SUM(prm.donnee), 0)    AS donnee
        ,    COALESCE(SUM(prm.a_donnee), 0)    AS a_donnee
    FROM    donneur    AS dnr
        LEFT OUTER JOIN 
            (    SELECT    promesse.id_donneur
                    ,    dns.donnee            AS donnee
                    ,    SUM(promesse.don)     AS a_donnee
                FROM    promesse
                    LEFT OUTER JOIN 
                        (    SELECT    don.id_promesse
                                ,    SUM(don.don) AS donnee
                            FROM    don
                            GROUP BY don.id_promesse
                        )    AS dns
                        ON    promesse.id = dns.id_promesse
                WHERE    promesse.id < 100     
                    AND    promesse.id NOT IN 
                        (    SELECT    id_promesse 
                            FROM    promesse_annuler
                        )
                GROUP BY    promesse.id_donneur
                        ,    dns.donnee
            )    AS    prm 
            ON dnr.id =    prm.id_donneur
    GROUP BY    dnr.id
            ,    dnr.nom
    HAVING    COALESCE(SUM(prm.donnee), 0) > COALESCE(SUM(prm.a_donnee), 0)
    Edit : grilled
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    Merci Waldar
    pour ta réponse, le doublon a disparu mais la selection n'est pas correct.

    Merci al1_24
    pour ta réponse, j'ai testé ta requette, mais retour aucune valeur.


    voir fichier en pièce jointe (plus infos)

    merci
    Images attachées Images attachées  

  5. #5
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Citation Envoyé par medkyl Voir le message
    Merci Waldar
    pour ta réponse, le doublon a disparu mais la selection n'est pas correct.

    Merci al1_24
    pour ta réponse, j'ai testé ta requette, mais retour aucune valeur.
    Qu'est ce qui ne te convient pas dans la sélection de Waldar ?
    Elle est juste et ne te renvoie pas de doublon.

    Ou alors c'est que tu attends autre chose.

    ERE

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    merci emmanuel.remy de ta réponse.

    Avec le code de Waldar (ci-dessous) je n'ai pas le bon cumul, mais effectivement il n'y a plus de doublon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HAVING
        SUM(COALESCE(PROMESSE.DON, 0)) > SUM(COALESCE(DON.DON, 0))

    alors qu'il me faudrait ceci mais j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HAVING
        COALESCE(PROMESSE.DON, 0) > SUM(COALESCE(DON.DON, 0))
    mais après j'ai un message d'erreur de group by

    et si je rajoute le PROMESSE.DON au group by et là encore les doublons.

    Merci pour votre aide.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je plus simple serait de nous dire, en français, ce que vous attendez, car vous essayez de le dire en SQL mais vous le maîtrisez mal, et donc le message ne passe pas complètement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/08/2006, 23h35
  2. [WD10] Problème de doublons
    Par routmout dans le forum WinDev
    Réponses: 5
    Dernier message: 07/06/2006, 18h36
  3. Problème de doublons
    Par RapidJul dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2006, 16h08
  4. Réponses: 7
    Dernier message: 30/01/2006, 21h36
  5. [access] Problème de doublons
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2005, 09h25

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