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 :

Problème de recherche via une requete [11g]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut Problème de recherche via une requete
    Bonjour,
    j'ai un soucis avec une requête, qui je croyais qu'au début fonctionné mais après avoir testé, je n'ai pas le résultat obtenu, j'ai la requête 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
     
    select t1.identifiantpersonne as numPersonne,
    pers.nom as NOM,
    pers.prenom as PRENOM
    from table1 t1 
    inner join table2 t3 on t3.idreftable1=t1.id
    inner JOIN table3 t2 ON t1.idreftable1 = t2.id
    inner join tablepersonne pers on pers.id=t1.x407_idreftable1
    WHERE t3.code=123  --le code 123 correspond au moyen de paiement, ça il reste inchangé
    and typePaiement='010' -- 010: en espece   020:par cb
    and t2.validite = to_date(dd/mm/yyyy,01/01/3999) --cela veut dire que le moyen de paiement actuel c'est le dernier utilisé par la personne, sinon nous aurions une date fixe
                                          --par exemple , sans cette condition, je peux avoir une personne avec une fin de moyen de paiment au 29052019 ça veut dire que jusqu'a aujourdhui
    									  --il a regler en espece et demain il passera en code 020 donc le reglement se fera via cb                    
      ;
    et j'aimerais donc identifier les personnes dont le moyen de paiement est toujours en espèce actuellement mais qui ont une carte bancaire valide ( je précise que c'est pas vraiment carte bancaire pour des raisons de confidentialité j'ai utilisé ce terme ), ceux-ci afin de prevenir les personnes du changement de moyen de paiement.

    J'ai tenté de faire un "in", c'est à dire de sélectionner les personnes qui paye en espèce puis faire par exemple :
    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
     
      select t1.identifiantpersonne as numPersonne,
    pers.nom as NOM,
    pers.prenom as PRENOM
    from table1 t1 
    inner join table2 t3 on t3.idreftable1=t1.id
    inner join tablepersonne pers on pers.id=t1.x407_idreftable1
    WHERE t3.code=123  
    and typePaiement='010'
     
    and t1.identifiantpersonne in (
    select ta.identifiantpersonne
    from table1 t1a 
    inner JOIN table3a t2a ON t1a.idreftable1 = t2a.id
    and t2a.validite = to_date(dd/mm/yyyy,01/01/3999) 
     
    )
    en gros je voulais d'abord selectionner les personnes avec un moyen de paiement en espece puis parmis celle ci selectionner les personnes avec un moyen de paiement par carte valide mais rien à faire, j'ai toujours des personnes avec paiement par carte qui ressorte, or je souhaite seulement celle qui utilise l'espèce mais qui ont une carte valide , sauriez vous me conseiller ?
    MERCI BCP

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 883
    Points
    12 883
    Par défaut
    Bonjour,
    il y a un problème de logique ici.
    La requête cherche les clients qui ont payé en espèce (qu'ils aient payé avec autre chose ou non), or tu veux les clients qui n'ont payé qu'en espèce.
    Ce n'est pas la même chose !
    Dit autrement, tu veux les clients qui n'ont jamais payé avec un autre mode de paiement que l'espèce, donc ceux pour lesquels il n'existe pas de paiement avec autre chose que de l'espèce.

    Il ne reste plus qu'à traduire tout ça en SQL.

    Tatayo.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 104
    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 104
    Points : 28 394
    Points
    28 394
    Par défaut
    Tu es sûr que l'expression to_date(dd/mm/yyyy,01/01/3999) retourne le résultat attendu ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut
    Bonjour,

    quand tu dis tatayo :
    Dit autrement, tu veux les clients qui n'ont jamais payé avec un autre mode de paiement que l'espèce, donc ceux pour lesquels il n'existe pas de paiement avec autre chose que de l'espèce
    oui c'est exact, mais qui ont une carte bancaire valide, donc qui paye en espece malgré cela, donc si je reformule et si je comprend bien c'est ; les clients qui n'ont jamais payé avec un autre mode de paiement que l'espèce, donc ceux pour lesquels il n'existe pas de moyen de paiement, autre que l'espèce, j'ai du mal à saisir.
    Pour résumé, je sais pas si c'est ça ce que tu voulais dire, mais je souhaite avoir les personnes qui continue à payer en espèces alors qu'ils ont une cb valide d'enregistrer dans la base.


    Quand je rajoute cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and t2.validite = to_date(dd/mm/yyyy,01/01/3999)
    cela signifie que je sélectionne les personnes avec une carte bancaire valide donc cette condition là est sur.

    J'ai remarqué dans la table 2, pour une personne on peut avoir 2 lignes par exemple :
    id idreft1 idrefpaiement datecreation(ligne)
    123456 65 020 04/01/17
    198756 65 010 02/02/14

    j'ai remarqué sur la fiche de la personne, avec l'historique des moyens de paiements:
    cb au 04/01/17
    espece au 02/02/14
    donc 2 lignes dans la base

    quand dans la base la datecreation de la ligne concernant le mode espece < la datecreation de la ligne du moyen de paiement par carte, alors le resultat est correct
    mais si c'est l'inverse, alors il (la requête )nous retourne une personne avec un moyen de paiement par carte.
    un grand merci

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ce que voulait dire Al1 c'est que to_date(dd/mm/yyyy,01/01/3999) n'est pas une commande valide SQL.
    to_date('01/01/3999', 'dd/mm/yyyy') est une commande valide.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut
    ah ok ok lol , oui oui certes enfin j'ai été un peu vite mais dans ma requête de base je l'ai bien écrit , je me suis emmêlé les pinceaux quand j'utilise to_char et to_date ça m'arrive parfois,mais là c'est juste parce que j'ai été un peu vite pour faire mon exemple, merci

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 934
    Points : 348
    Points
    348
    Par défaut
    je ferme le sujet, celui ci netant plus d'actualité

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

Discussions similaires

  1. Problème de délais de recherche d'une requete
    Par idaram dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/09/2015, 15h40
  2. Réponses: 3
    Dernier message: 08/12/2013, 17h44
  3. Recherche alternative dans un champ récupéré via une requete sql
    Par sliwaliwa dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 05/12/2013, 15h57
  4. [Débutant] problème connexion d'un utilisateur via une requete sql
    Par rikiki123 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/11/2011, 10h59

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