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 :

Comparaison dans une même table des montants avec %


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut Comparaison dans une même table des montants avec %
    Bonjour à tous,[

    Je commence avec SQL et je dois extraire de la base des "faux doublons" :
    Je dois extraire des factures pour une même personne, pour un même numéro de facture avec un montant différent de 5%.

    Merci pour votre aide car je n'ai pas trouvé le moyen. Les factures sont dans la même table. J'ai commencé avec ceci pour extraire les doublons mais là je suis bloqué car se sont des " faux doublons" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT *
    FROM detect.facture_ps AS t1
    WHERE EXISTS
        (SELECT *
         FROM detect.facture_ps AS t2
    	WHERE t1.fect_idtech <> t2.fect_idtech 
    	AND t1.idfactpk = t2.idfactpk
    	AND t1.fk_idadh = t2.fk_idadh 
    	AND t1.datefact = t2.datefact 
    	AND t1.mttotalremlbfact = t2.mttotalremlbfact
        AND t1.mttotalremlbfact > 0
        )
    ORDER BY t1.idfactpk

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 669
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Je ne comprends pas bien, dans l'énoncé tu parles de factures avec des montants différents, or tu construit ta jointure avec égalité sur le n° de facture et le montant.

    Comment peut on avoir 2 fois le même n° de facture dans une table facture (il faudrait joindre le MPD avec les index), et si vraiment présent 2 fois, n'y a -t- il pas un code genre annulation qui ferait que seule une des 2 est valide. Sinon je ne comprends pas les montants diiférents.

    Par ailleurs quelques remarques :

    - un distinct sur un select * ça va couter cher en tri ! est-ce vraiment utile, j'en doute
    - select * idem, as tu vraiment besoin de toutes les colonnes, transporter des données a aussi un cout, et on a rarement besoin de tout
    - en cas d'écart de montant, ne faut il pas comparer les éléments composants la facture (articles facturés, quantités, prestations annexes) pour expliquer les doublons (en conservant l'idée que seule une des 2 factures est valide, quelques explications sur ce point particulier sont nécessaires) ?

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    remplacer and t1.mttotalremlbfact = t2.mttotalremlbfact par :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and (abs(t1.mttotalremlbfact - t2.mttotalremlbfact) / t1.mttotalremlbfact < .05 or abs(t1.mttotalremlbfact - t2.mttotalremlbfact) / t2.mttotalremlbfact < .05)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    Bonjour StringBuilder,

    La comparaison est bien mais j'ai un problème avec des factures qui sont égales à 0.
    Il ne s'agit pas de facture comptable mais des factures provenant de professionnel de santé qui peuvent emmètre des montants à 0.


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur SQL :
    ERREUR:  division par zéro

    Comment les exclure avant le calcul ?

    Merci

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Rajouter un test sur la valeur zéro pour écarter du test les factures où t1 = 0 ou t2 = 0, et exclure les factures où t1 = 0 et t2 = 0.

    Je te laisse écrire seul cette partie, c'est trivial à écrire.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 669
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Rajouter un test sur la valeur zéro pour écarter du test les factures où t1 = 0 ou t2 = 0, et exclure les factures où t1 = 0 et t2 = 0.

    Je te laisse écrire seul cette partie, c'est trivial à écrire.
    Désolé d'insister, mais pour ma part, les solutions techniques n'auront de sens que lorsque j'aurai compris le contexte, or, je ne comprends toujours pas comment on peut avoir 2 factures avec le même numéro d'une part, et qui plus est avec des montants différents d'autre part.

    Soit l'une des 2 est annulée auquel cas il n'y a plus de doublon, soit... bah j'en sais rien

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

Discussions similaires

  1. Champs identiques avec valeur différente where dans une même table
    Par Cyrus59 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/11/2014, 17h56
  2. Comparer des informations dans une même table
    Par foscor dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/10/2014, 17h59
  3. [AC-2010] Comparaison de données dans une même table
    Par ambact dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/10/2013, 13h13
  4. Réponses: 6
    Dernier message: 10/11/2012, 00h18
  5. Réponses: 2
    Dernier message: 16/05/2008, 15h43

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