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 :

Besoin d'aide sur une requête sql - éviter doublon


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 53
    Points : 39
    Points
    39
    Par défaut Besoin d'aide sur une requête sql - éviter doublon
    Bonjour tout le monde, bonne année et surtout bonne santé !

    J'ai besoin de votre aujourd'hui. En fait je suis bloqué sur une requête sql depuis 2 jours.

    J'ai des clients qui payent des loyers tous les mois et dans ma base de données postgres j'arrive à faire ma requête pour afficher par an combien de mes clients ont payés.
    Par contre ce que je veux c'es que si une personne a payé en 2015 je ne veut pas qu'elle apparaisent en 2016.

    Par exemple :
    Actuellement j'ai ça :

    Nombre de client : 5000
    A: 2521
    B: 2200
    C: 1000
    D: 3256
    E: 2368

    Le problème c'est que je n'arrive pas à cloisonner pour q'un client ne soit que dans une des années. et pas dans toutes.
    Avec comme priorité : si il a déjà payé dans le A l'incrémenter dans A et ne pas l'afficher dans les autres, sinon si il a déjà payé dans le b l'incrémenter dans le b et ne pas l'incrémenter dans les autres ...

    Vous voyez l'idée, ce qu'il devrait donner quelque chose comme ça :

    Nombre de client : 5000
    A: 500
    B: 2000
    C: 1000
    D: 500
    E: 1000


    Voila j'attends de vos conseils et vous souhaite un très bon weekend, cordialement.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 381
    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 381
    Points : 39 865
    Points
    39 865
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Difficile de vous proposer quelque chose sans la description des tables

    De plus, fonctionnellement, si un client paye en janvier 2016 une facture de décembre 2015, quelle date faut il prendre en compte celle du paiement ou de la facture ?
    Selon le cas, la réponse n'est pas la même, dans un cas, la table des paiement suffit, dans l'autre, il faut consulter aussi la table des factures

    Besoin à préciser et documenter donc

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 480
    Points
    28 480
    Par défaut
    Il nous faudrait vraiment plus d'informations pour pouvoir t'aider :
    • la structure de la ou des tables en jeu
    • le détail des règles à mettre en œuvre
    • un jeu d'essai significatif (avec tous les cas possibles)
    • le résultat attendu sur ces valeurs
    • la ou les requêtes déjà essayées accompagnées des raisons pour lesquelles elles ne conviennent pas

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 53
    Points : 39
    Points
    39
    Par défaut
    Bonjour, effectivement veuillez m'excuser je ne suis pas assez précis.


    Ma table est composé comme ceci :

    Personne_id ::numeric
    montant_versement::numeric
    type_de_versement::numeric
    date_couvert::numeric


    De plus, fonctionnellement, si un client paye en janvier 2016 une facture de décembre 2015, quelle date faut il prendre en compte celle du paiement ou de la facture ?
    Je prend simplement l'année de versement (qui correspond au début de mois couvert).

    Sinon voila j'aimerai que le résultat ressemble à ceci :

    Annee
    2014 type_de_versement_A 1000
    2014 type_de_versement_B 500
    2014 type_de_versement_C 2000
    2014 type_de_versement_D 5000
    2015 type_de_versement_A 1200
    2015 type_de_versement_B 1256
    2015 type_de_versement_C 1000
    2015 type_de_versement_D 1230

    J'arrive à construire la requête pour qu'elle puisse me sortir cette structure mais le soucis c'est qu'une personne dans mon cas actuelle peut dans une même année être en type_de_versement_a et b.
    Ce que je voudrais c'est que si il a déjà versé en a je ne veut pas le comptabiliser dans le b

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour faire ce que tu veux, il te manque une table. Supposons que tu aies une table type_de_versement
    contenant deux colonnes TypeVersement Priorité
    type_de_versement_A priorité 1
    type_de_versement_B priorité 2
    etc.. tu peux mettre mettre les priorités de 10 en 10 pour permettre de réordonner.

    Et une requete comme celle là
    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
    With Consolidations
    As
    (
    select personne_id,Year(date_couvert) annee,type_de_versement, priorite, sum(montant_versement) somme_versement
     
    from Versements v
    inner join type_de_versement tv
    on v.type_de_versement=tv.type_de_versement
    group by personne_id,Year(date_couvert),type_de_versement, priorite
    )
    Select 
    from 
    (	select personne_id, min(annee) min_annee
    	from Consolidations
    	group by personne_id
    ) T
    inner join 
    (
    	select personne_id, annee,min(priorite) min_priorite
    	From Consolidations C
    	group by personne_id, annee
    ) P
    	on T.personne_id=P.personne_id
    	and T.min_annee=P.Annee
    inner join Consolidation
    on c.Personne_id=P.personne_id
    and c.annee=P.Annee
    and c.priorite=P.min_priorite
    Mais je ne suis pas sure de moi.
    On pourrait aussi utiliser les fonctions de fenêtrage, mais je ne les maitrise pas assez pour les employer ici.
    Soazig

Discussions similaires

  1. Besoin d'aide sur une requête SQL
    Par MehdiD83 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/06/2017, 19h26
  2. Besoin d'aide sur une requête SQL
    Par omran.info dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2012, 11h28
  3. Besoin d'aide sur une requête SQL
    Par Khyinn dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/07/2010, 22h23
  4. Réponses: 1
    Dernier message: 03/08/2005, 12h41

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