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

Requêtes et SQL. Discussion :

Relation entre deux requêtes pour rechercher une valeur de champs commune [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Relation entre deux requêtes pour rechercher une valeur de champs commune
    Bonjour,

    je bloque un peu et mon résultat n'est pas ce que j'attends car il y a une petite suptilité ou astuce: je retrouve pas les valeurs comme une rechercheV.


    J'ai deux requêtes différentes avec 1 er requête champs CBE et une autre requête avec un champs OVE, mais toutes les 2 ont un point commun le résultat mais dans le désordre, je voudrais faire comme une recherche v simplement mais cela marche pas quand les valeurs des champs sont dans le désordre. pourquoi pas une sorte de contient...

    mon cas :

    champs
    CBE : contient les données suivante B522 etc... incrémentation sur 600 lignes.
    OVE : contient les mêmes données suivante mais dans le désordre 522 B 3 avec un chiffre en plus et des espaces.

    je voudrais trouver l 'astuce qui me permettre de dire dans la liaison entre c deux champs si OVE contient exemple les 4 1 er caractères de CBE alors recopie le champ identiques comme une recherche v

    merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il faut que dans une des requêtes que tu crées un champ où grâce à des fonctions de gestions de chaines tu remets cela dans l'ordre comme dans la deuxième requête, et ensuite tu fais la liaison sur ce champ.

    Pour les fonctions, il s'agit de concaténation avec Left, Right et Mid pour extraire les données.

    Philippe

  3. #3
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Cela pourrait se traduire par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Table1, Table2 SET Table1.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
    les parties de chaines à chercher sont définies par les Mid$
    obe est copié dans ove si les conditions sont vérifiées

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Tout d'abord Merci Helas pour votre vision, je trouve que c pas trop mal,

    cependant voici le sql que j'ai adapté suite à votre aide mais je bloque toujours :

    table 1 = Base
    table 2 = INDC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT INDC.ove, InStr(1,[cbe],Mid$([ove],2,3)) AS Expr1, InStr(1,[cbe],Mid$([ove],1,1)) AS Expr2
    FROM INDC INNER JOIN Base ON INDC.OVE = Base.CBE
    WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
    j'ai liée les 2 requêtes, mais n'arrive pas à recopier les mêmes données suivante dans OVE si présente dans CBE même si dans le désordre.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Table1, Table2 SET Table1.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
    est-il possible de le faire sans update ? car j 'arrive pas à faire tourner la requête..

  6. #6
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    et avec ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE INDC, Base SET INDC.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Bonjour toujours impossible

    J'ai testé mais n 'arrive pas le faire fonctionner, je suis arrivé à faire la requête mais aucune recopie n'est faite

    voici mon fichier pour exemple, comment le faire marcher ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE INDC, Base SET INDC.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));

  8. #8
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    cette requête fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Base, INDC SET Base.CBE = [INDC]![ove] WHERE (((InStr(1,[ove],Left$([cbe],1)))>0) AND ((InStr(1,[ove],Mid$([cbe],2,3)))>0));
    elle remplace le contenu du champ CBE par la valeur du champ OVE si les critères sont vérifiés.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Merci Helas pour votre aide ! mais cependant je viens de m'aperçevoir d un truc je dispose en + d une nlle table :

    Dans cette nlle table "alte" uniquement J'ai besoin de mettre dans l'ordre les résultats de mon champs nommé "INDT" de cette manière ci-dessous

    Exemple : ma nouvelle table "alte" contient un champ "INDT"

    Dans mon champs "INDT" :

    221 A 5
    651 B 5
    211 6 5
    299 4 5
    789 8 5

    comment faire pour : mettre dans l'ordre suivant la lettre en 1er et garder les 3 premier chiffre uniquement. Comme ce-ci Resultat A221 ensuite B651 etc.... pour tous mon champ "INDT" et la même chose pour ts les résultats .


    j'ai pensé à faire gauche 3 droite 1 et concaténer mais cela fait du bricolage pas très pratique y -a-t-il une solution requête màj ? pour faire cela automatiquement je bloque un peu car gauche et droite me sort un resultat pas top

    Merci pour votre éclairage

  10. #10
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Debutant10, Helas et Philippe,

    Je me permets de m'immiscer...

    Debutant10, ce que tu demandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    221 A 5 ==> A221
    651 B 5 ==> B651
    ...
    ne présente aucune difficulté : tout est dans les réponses de Hélas.

    Il faudrait que tu potasses les fonctions de traitement de chaînes de caractères (voir l'assistant, c'est très clair) : Gauche, Droite, DansChaîne, etc...

    La solution qui consiste à te donner des requêtes SQL toutes faites, à chaque fois, sans que tu les étudies, ne me semble pas être très efficace pour que ton pseudo évolue...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Bonjour

    Voici un petit Récapitulatif :

    Suite à l'aide d'Helas mais la résolution du pb n'est pas OK :

    1-/ la requête dessous d'Hélas me recopie uniquement la valeur 122 B3 3 fois de suite dans la table base champs --> OVE or donc pas bon
    ce que j 'essai de mettre en forme c remettre dans l'orde le résultat simplement comme ci-dessous
    le but :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    122 B 3 ==> B122
    652 B 5 ==> B652
    ...
    Requête non fonctionnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Base, INDC SET Base.CBE = [INDC]![ove] WHERE (((InStr(1,[ove],Left$([cbe],1)))>0) AND ((InStr(1,[ove],Mid$([cbe],2,3)))>0));
    mon idée extraire la lettre à chaque fois puis concaténer un peu (pas très top mais bon...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT INDC.OVE, Right([OVE],4) AS Expr1
    FROM INDC
    GROUP BY INDC.OVE;
    J'essai d'extraire seulement la lettre puis faire concaténer je cherche actuellement...

  12. #12
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Crées, d'abord, une requête qui transforme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    122 B 3 ==> B122
    652 B 5 ==> B652
    ...
    dans un champ calculé.
    Es-tu, dans un premier temps, parvenu à ce résultat ?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Crées, d'abord, une requête qui transforme dans un champ calculé.
    Es-tu, dans un premier temps, parvenu à ce résultat ?
    Je c pas transformer justement j'ai essayé de mettre cela dans un champs calculé mais pas terrible j 'ai testé gauche droite j 'arrive pas à le mettre comme ci-dessous...

    trouver une requête qui puisse remettre ts cela dans ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    122 B 3 ==> B122
    652 B 5 ==> B652
    ...

  14. #14
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Debutant10,

    Je t'invite à étudier les fonctions, via l'assistant (click droit dans "champ", "Créer", "fonctions intégrées") :
    • Gauche(champ ; longueur) ;
    • Droite(champ ; longueur) ;
    • ExtracChaîne(champ ; position début ; longueur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    122 B 3 ==> B122
    652 B 5 ==> B652
    ==> nous constatons que :
    • "B" est à la 5ème position sur 1 caractère ;
    • "122" et "652" sont les 3 premiers caractères de gauche.

    Tu possèdes toutes les données : à toi de jouer !...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Merci pour votre aide

    J'ai trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT INDC.OVE, Mid([OVE],5,1) AS lettre, Left([OVE],3) AS nbr, Mid([OVE],5,1) & "" & Left([OVE],3) AS Total
    FROM INDC
    GROUP BY INDC.OVE, Left([OVE],3), Mid([OVE],5,1) & "" & Left([OVE],3);
    une expression pour extraire la lettre
    une expression pour les 3 premier chiffres puis j 'ai concaténé
    je vais mettre cela en forme

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

Discussions similaires

  1. [XL-2007] Fonction recherchev pour rechercher une valeur
    Par dodkirua dans le forum Excel
    Réponses: 2
    Dernier message: 03/10/2014, 11h18
  2. [XL-2003] Macro pour rechercher une valeur en fonction de la valeur d'une cellule
    Par Rook93 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/01/2013, 11h42
  3. codage vba pour rechercher une valeur selon 2 critères
    Par sims92.66 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/10/2011, 21h29
  4. Requête pour mettre une valeur a un champ.
    Par Jazz_ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2010, 11h35
  5. [XPATH] Rechercher une valeur entre deux valeurs min et max
    Par icicmoi dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2008, 12h12

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