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

WinDev Discussion :

Requête multi critères mais de nombre variable


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut Requête multi critères mais de nombre variable
    Bonjour,
    je sais pas comment résoudre mon besoin :
    à partir d'un tableau j'ai n valeurs (entiers) qui correspond à des créneaux CLIENT, ces n valeurs peuvent varier, je peux en avoir 1 comme... 50.

    je cherche à trouver qui de mes créneaux de MNS matchent avec ces n valeurs

    donc j'aimerai faire une requête en lui passant ces n valeurs pour paramètre, mais le souci c'est comment passer ces n valeurs dans une requete telle que celle ci dessous :

    au final j'aimerai obtenir tous les IDMNS dont au moins un de leur créneaux à matché avec un des paramètres


    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
    ReqMatch est une requete SQL =
    [
     
    SELECT 
        MNS.IDMNS AS IDMNS
    FROM 
        MNS,    
        Creneaux_MNS
    WHERE 
        MNS.IDMNS = Creneaux_MNS.IDMNS
        AND
        (
            Creneaux_MNS.IDCreneaux LIKE {param1}
    OR Creneaux_MNS.IDCreneaux LIKE {param2}... etc
        
        )
     
    ]
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 264
    Points
    5 264
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
    MNS.IDMNS AS IDMNS
    FROM
    MNS,
    Creneaux_MNS
    WHERE
    MNS.IDMNS = Creneaux_MNS.IDMNS
    AND Créneaux_MNS.IDMNS IN {pListeCréneau}
    où pListeCréneau est une chaîne du type 5,7,9 (Sous Windev il est possible qu'il faille remplacer les "," par des ";") si tu cherche les créneaux 5, 7 et 9
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup pour ton aide,
    j'ai tout essayé, une chaine (pListeCreneau est une chaîne = "7,4" ou même 7;4), une liste d'entiers :
    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
     
    ListeCréneau est une Liste d'entiers
    ListeCréneau = ["7,4"]
     
    //pListeCreneau est une chaîne = "7,4"
     
    ReqMatch est une requete SQL =
    [
     
    SELECT 
        Creneaux_MNS.IDMNS AS IDMNS
    FROM 
        Creneaux_MNS,
        MNS
    WHERE 
        MNS.IDMNS = Creneaux_MNS.IDMNS AND
        Creneaux_MNS.IDCreneaux IN {ListeCreneau}
     
    ]
     
    ]
    mais le résultat n'est pas bon, cela marche uniquement si je met les id en dur dans la requête comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Creneaux_MNS.IDCreneaux IN (7,4)
    ...

    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
    MNS.IDMNS AS IDMNS
    FROM
    MNS,
    Creneaux_MNS
    WHERE
    MNS.IDMNS = Creneaux_MNS.IDMNS
    AND Créneaux_MNS.IDMNS IN {pListeCréneau}
    où pListeCréneau est une chaîne du type 5,7,9 (Sous Windev il est possible qu'il faille remplacer les "," par des ";") si tu cherche les créneaux 5, 7 et 9

  4. #4
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Bonsoir,

    c'est la joie des petits détails! Comme constaté: il faut rajouter les parenthèses:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
        Creneaux_MNS.IDMNS AS IDMNS
    FROM 
        Creneaux_MNS,
        MNS
    WHERE 
        MNS.IDMNS = Creneaux_MNS.IDMNS AND
        Creneaux_MNS.IDCreneaux IN ({ListeCreneau})

    Et le séparateur est bien le ;

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut
    Merci Voroltinquo ça fonctionne ! J'ai souffert avec le point-virgule ; entre les deux valeurs, pourtant en SQL on met bien une virgule , et quand on test la req, elle fonctionne bien avec une simple virgule
    Bref,.. les détails qui tuent...

    Je mets le code ici pour aider éventuellement ceux qui cherchent, rappel : le but est de faire matcher des créneaux entre MNS et Clients, soit trouver si des MNS ont au moins un créneau en commun avec des créneaux d'un client donné.

    Encore un GRAND merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sChaine est une chaîne = "4;7"//les deux idcréneaux d'un client
     
    REQ_MatchCreneaux.ListeCreneaux = sChaine // passer parametre à la requete
     
    SI PAS HExécuteRequête(REQ_MatchCreneaux,hRequêteDéfaut) ALORS
        Erreur(HErreurInfo())
    SINON    
        POUR TOUT REQ_MatchCreneaux
            Trace("affiche requete : "+REQ_MatchCreneaux.Prénom)// affiche le prénom des MNS qui ont au moins un idcréneau en commun avec 4 ou 7
        FIN
    FIN
    Requête SQL (dans un fichier à part nommé REQ_MatchCreneaux)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
        MNS.Prénom AS Prénom,
        Creneaux_MNS.IDMNS AS IDMNS
    FROM 
        MNS, Creneaux_MNS
    WHERE 
        Creneaux_MNS.IDMNS = MNS.IDMNS 
    AND
        (Creneaux_MNS.IDCreneaux IN({ListeCreneaux}))

Discussions similaires

  1. Requete multi-critères filtrage
    Par chrtophe dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/06/2013, 21h00
  2. [AC-2003] Erreur 3075 : requete multi critère
    Par b.billet85 dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/11/2010, 16h44
  3. Requete Multi critères avec Date
    Par Myogtha dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/12/2008, 20h58
  4. requete multi critère
    Par reeda dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/08/2007, 12h24
  5. Requete multi-critères
    Par anutka dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2005, 13h30

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