Requête de non correspondance qui ne fonctionne pas
Résolu
Patrick
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je bloque sur une requête de non correspondance qui donne un résultât erroné et j'aurai vraiment besoin de vos compétences.
Mon Objectif est d'obtenir la liste des personnes qui n'ont pas assisté à une action.
Ma requête utilise deux tables, la table Personnel et la table Participant
Elles sont reliés par deux champs pour la table Personnel : Personnel.Personnel_Num et pour Participant : Participant.Participant_Personnel_Num.
J'ai besoin de préfiltrer filtrer Personnel avec : Personnel.Personnel_Num_Client=330 et Personnel.Personnel_Activite=-1 .
Pour Participant je préfiltre avec : Participant.Participant_Présent=-1 et Participant.Participant_Module_Num=1528785947.
La requête est écrite de la manière suivante :
Le résultat de la requête me donne une liste qui intègre des personnes qui ont déjà assisté à l'action ciblée, seuls quelques salariés sont extraits.
Pourriez vous me dire ou est ce que vous voyez un soucis.
Je vous en remercie par avance.
Je bloque sur une requête de non correspondance qui donne un résultât erroné et j'aurai vraiment besoin de vos compétences.
Mon Objectif est d'obtenir la liste des personnes qui n'ont pas assisté à une action.
Ma requête utilise deux tables, la table Personnel et la table Participant
Elles sont reliés par deux champs pour la table Personnel : Personnel.Personnel_Num et pour Participant : Participant.Participant_Personnel_Num.
J'ai besoin de préfiltrer filtrer Personnel avec : Personnel.Personnel_Num_Client=330 et Personnel.Personnel_Activite=-1 .
Pour Participant je préfiltre avec : Participant.Participant_Présent=-1 et Participant.Participant_Module_Num=1528785947.
La requête est écrite de la manière suivante :
SELECT Personnel.Personnel_Num, Personnel.Personnel_Equipe, Personnel.Personnel_Num_Client, Personnel.Personnel_Activite, Personnel.Personnel_Prenom, Personnel.Personnel_Nom
FROM Personnel
WHERE (((Personnel.Personnel_Num_Client)=330) AND ((Personnel.Personnel_Activite)=-1) AND ((Exists (SELECT Participant.Participant_Personnel_Num, Participant.Participant_Module_Num FROM Participant WHERE
Participant.Participant_Personnel_Num=Personnel.Personnel_Num AND Participant.Participant_Présent=-1 AND Participant.Participant_Module_Num=1528785947))=False));
Le résultat de la requête me donne une liste qui intègre des personnes qui ont déjà assisté à l'action ciblée, seuls quelques salariés sont extraits.
Pourriez vous me dire ou est ce que vous voyez un soucis.
Je vous en remercie par avance.
A voir également:
- Requête de non correspondance qui ne fonctionne pas
- 38 dictionnaires et recueils de correspondance - Télécharger - Dictionnaires & Langues
- Taille 32x32 correspondance ✓ - Forum Consommation & Internet
- Quel service d'internet permet à son navigateur de trouver l’adresse ip qui correspond à bipm.org ? - Forum Réseau
- Comment trouver l'adresse internet des pages d'un site ? - Forum Webmastering
- Cette valeur ne correspond pas aux restrictions de validation des données pour cette cellule ✓ - Forum MacOS
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, et ceci?
SELECT Personnel.Personnel_Num, Personnel.Personnel_Equipe, Personnel.Personnel_Num_Client, Personnel.Personnel_Activite, Personnel.Personnel_Prenom, Personnel.Personnel_Nom FROM Personnel left join Participant on Participant.Participant_Personnel_Num = Personnel.Personnel_Num where Personnel.Personnel_Num_Client =330 AND Personnel.Personnel_Activite AND Participant.Participant_Présent AND Participant.Participant_Module_Num = 1528785947 and Participant.Participant_Personnel_Num is null;
Bonsoir, j'ai essayé et malheureusement non..... même si à la lecture du code ça devrait fonctionner. Merci néanmoins pour votre proposition.
à toi maintenant d'expliquer factuellement la différence entre ce que tu obtiens et ce que tu souhaites.
qu'est-ce qui manque, qu'est)ce qui est en trop.
en partageant, bien sûr, les données correspondantes dans les deux tables.
ta description initiale était extrêmement floue.
tu mélangeais ce que tu voulais obtenir et comment tu essayais de l'obtenir.
tu mentionnais des préfiltres sans préciser si tu voulais inclure ou exclure certaines conditions.
qu'est-ce qui manque, qu'est)ce qui est en trop.
en partageant, bien sûr, les données correspondantes dans les deux tables.
ta description initiale était extrêmement floue.
tu mélangeais ce que tu voulais obtenir et comment tu essayais de l'obtenir.
tu mentionnais des préfiltres sans préciser si tu voulais inclure ou exclure certaines conditions.
Merci pour votre précédent retour.
J'ai 2 tables. PERSONNEL et PARTICIPANT.
Je souhaite obtenir par une requête de non correspondance tous les personnels qui n'ont pas participé à une action.
J'ai retravaillé PARTICIPANT pour ne plus préfiltrer sur PERSONNEL.
Plus clairement je souhaite obtenir les Numero, Nom, Prenom dans PERSONNEL des personnes Actives qui n'ont pas suivi l'action 906 et appartenant au client 330.
Donc maintenant dans PERSONNEL j'ai :
Personnel_Num
Personnel_Nom
Personnel_Prenom
Personnel_Num_Client (qui doit être égal à 330)
Personnel_Activite (qui doit être égal à -1 / vrai)
Dans Participant j'ai :
Participant_Personnel_Num (lie à Personnel_Num ) Est Null
Participant_Client_Num (qui doit être égal à 330)
Participant_Module_Num (qui doit être égal à 906)
Voici le code de la requête que j'ai mis en place et qui ne donne aucun résultat. (ligne de recordset vide).
J'espère que mes explications vous permettront de mieux cerner mon propos.
Cdlt.
J'ai 2 tables. PERSONNEL et PARTICIPANT.
Je souhaite obtenir par une requête de non correspondance tous les personnels qui n'ont pas participé à une action.
J'ai retravaillé PARTICIPANT pour ne plus préfiltrer sur PERSONNEL.
Plus clairement je souhaite obtenir les Numero, Nom, Prenom dans PERSONNEL des personnes Actives qui n'ont pas suivi l'action 906 et appartenant au client 330.
Donc maintenant dans PERSONNEL j'ai :
Personnel_Num
Personnel_Nom
Personnel_Prenom
Personnel_Num_Client (qui doit être égal à 330)
Personnel_Activite (qui doit être égal à -1 / vrai)
Dans Participant j'ai :
Participant_Personnel_Num (lie à Personnel_Num ) Est Null
Participant_Client_Num (qui doit être égal à 330)
Participant_Module_Num (qui doit être égal à 906)
Voici le code de la requête que j'ai mis en place et qui ne donne aucun résultat. (ligne de recordset vide).
SELECT Personnel.Personnel_Num, Personnel.Personnel_Num_Client, Personnel.Personnel_Activite, Personnel.Personnel_Prenom, Personnel.Personnel_Nom, Participant.Participant_Personnel_Num, Participant.Participant_Client_Num
FROM Personnel LEFT JOIN Participant ON Personnel.[Personnel_Num] = Participant.[Participant_Personnel_Num]
WHERE (((Personnel.Personnel_Num_Client)=330) AND ((Personnel.Personnel_Activite)=True) AND ((Participant.Participant_Personnel_Num) Is Null) AND ((Participant.Participant_Module_Num)=906) AND ((Participant.Participant_Client_Num)=330));
J'espère que mes explications vous permettront de mieux cerner mon propos.
Cdlt.
Sur ce que je souhaite et ce que j'obtiens je ne sais pas comment le dire différemment que précédemment.
Je souhaite la liste des salariés qui n'ont pas participé à une action.
J'obtiens un recordset vide.
Après plusieurs tests sur l'expression de la requête de non correspondance je pense que filtrer sur la partie droite de la requête n'est pas possible car dès qu'un élément de filtre est rajouté par exemple "Participant_Client_Num=330" le résultat est un recordset vide.
J'ai néanmoins obtenu le bon résultat en procédant différemment mais la forme n'est pas satisfaisante. Je ne filtre plus dans la requête de non correspondance. La requête de non correspondance se fait entre la table PERSONNEL et une requête préparatoire qui intègre les filtrages que je souhaite.
Dans ce cas le résultat obtenu est correct : la liste des salariés qui n'ont pas participé à une action est affichée.
La requête de NC est nommée PRINCIPAL elle appelle une autre requête qui intègre les filtrage que se nome PREPA.
PRINCIPAL :
PREPA :
Par contre je dois absolument éviter de faire appel à la requête PREPA mais l'intégrer dans le texte de PRINCIPAL pour que dans le corps de mon programme, 330 et 906 soient remplacés par des variables de session........ je ne sais pas du tout comment faire.
Vous est il possible de me montrer comment Modifier PRINCIPAL aux deux endroit ou prépa apparait dans le texte?
PREPA devrait s'écrire:
Je vous remercie par avance pour votre retour.
Je souhaite la liste des salariés qui n'ont pas participé à une action.
J'obtiens un recordset vide.
Après plusieurs tests sur l'expression de la requête de non correspondance je pense que filtrer sur la partie droite de la requête n'est pas possible car dès qu'un élément de filtre est rajouté par exemple "Participant_Client_Num=330" le résultat est un recordset vide.
J'ai néanmoins obtenu le bon résultat en procédant différemment mais la forme n'est pas satisfaisante. Je ne filtre plus dans la requête de non correspondance. La requête de non correspondance se fait entre la table PERSONNEL et une requête préparatoire qui intègre les filtrages que je souhaite.
Dans ce cas le résultat obtenu est correct : la liste des salariés qui n'ont pas participé à une action est affichée.
La requête de NC est nommée PRINCIPAL elle appelle une autre requête qui intègre les filtrage que se nome PREPA.
PRINCIPAL :
SELECT Personnel.Personnel_Num_Client, Personnel.Personnel_Activite, Personnel.Personnel_Num, Personnel.Personnel_Equipe, Personnel.Personnel_Prenom, Personnel.Personnel_Nom
FROM Personnel LEFT JOIN PREPA ON Personnel.[Personnel_Num] = PREPA.[Participant_Personnel_Num]
WHERE (((Personnel.Personnel_Num_Client)=330) AND ((Personnel.Personnel_Activite)=True) AND ((PREPA.Participant_Personnel_Num) Is Null));
PREPA :
SELECT Participant.Participant_Personnel_Num, Participant.Participant_Client_Num, Participant.Participant_Module_Num, Participant.Participant_Annee_Num
FROM Participant
WHERE (((Participant.Participant_Client_Num)=330) AND ((Participant.Participant_Module_Num)=906) AND ((Participant.Participant_Annee_Num)>=Year(Now())-3));
Par contre je dois absolument éviter de faire appel à la requête PREPA mais l'intégrer dans le texte de PRINCIPAL pour que dans le corps de mon programme, 330 et 906 soient remplacés par des variables de session........ je ne sais pas du tout comment faire.
Vous est il possible de me montrer comment Modifier PRINCIPAL aux deux endroit ou prépa apparait dans le texte?
PREPA devrait s'écrire:
SELECT Participant.Participant_Personnel_Num, Participant.Participant_Client_Num, Participant.Participant_Module_Num, Participant.Participant_Annee_Num
FROM Participant
WHERE (((Participant.Participant_Client_Num)="&Session("UtilCompte")&") AND ((Participant.Participant_Module_Num)="&Session("UtilModule")&") AND ((Participant.Participant_Annee_Num)>=Year(Now())-3));
Je vous remercie par avance pour votre retour.
pour insérer la source de PREPA dans la requête principale:
... FROM Personnel LEFT JOIN (SELECT Participant.Participant_Personnel_Num, Participant.Participant_Client_Num, Participant.Participant_Module_Num, Participant.Participant_Annee_Num FROM Participant WHERE (((Participant.Participant_Client_Num)="&Session("UtilCompte")&") AND ((Participant.Participant_Module_Num)="&Session("UtilModule")&") AND ((Participant.Participant_Annee_Num)>=Year(Now())-3))) as PREPA ON ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici le requête finale qui fonctionne :
J'y réintégrerai dans le code les variables de session.
Je vous remercie, yg_be, pour votre patience et pour l'aide que vous m'avez apporté durant tout un Samedi et un Dimanche matin.
Bien cordialement.
SELECT Personnel.Personnel_Num_Client, Personnel.Personnel_Activite, Personnel.Personnel_Num, Personnel.Personnel_Equipe, Personnel.Personnel_Prenom, Personnel.Personnel_Nom
FROM Personnel
LEFT JOIN
(SELECT Participant.Participant_Personnel_Num, Participant.Participant_Client_Num, Participant.Participant_Module_Num, Participant.Participant_Annee_Num
FROM Participant
WHERE (((Participant.Participant_Client_Num)=330)
AND ((Participant.Participant_Module_Num)=906 )
AND ((Participant.Participant_Annee_Num)>=Year(Now())-3)))
AS PREPA
ON Personnel.[Personnel_Num] = PREPA.[Participant_Personnel_Num]
WHERE (((Personnel.Personnel_Num_Client)=330) AND ((Personnel.Personnel_Activite)=True) AND ((PREPA.Participant_Personnel_Num) Is Null));
J'y réintégrerai dans le code les variables de session.
Je vous remercie, yg_be, pour votre patience et pour l'aide que vous m'avez apporté durant tout un Samedi et un Dimanche matin.
Bien cordialement.