Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête doublon Access 2013

7 réponses
Avatar
AdelineDS
Bonjour,

Je souhaiterais pouvoir faire une requ=C3=AAte sur un champ "nom de patient=
".

J''ai mont=C3=A9 une requ=C3=AAte "doublon" afin d'extraire les noms de pat=
ients identiques, qui fonctionne.
J'aimerais pouvoir faire ce m=C3=AAme type de requ=C3=AAte mais en tronquan=
t le r=C3=A9sultat.

Il m'arrive d'avoir seulement les 3 1=C3=A8re lettres du nom.
Si par exemple j'ai 2 fiches avec pour la premi=C3=A8re "Durand Marcel" et =
la 2=C3=A8me "Dur Ma", je souhaiterais que la 2=C3=A8me fiche sorte =C3=A9g=
alement. Le nom n'=C3=A9tant pas strictement identique ne sort pas dans la =
premi=C3=A8re requ=C3=AAte doublon.

C'est un formulaire fait pour une ann=C3=A9e avec au final environ 4500 ent=
r=C3=A9es =C3=A0 terme. Je ne peux donc pas monter une requ=C3=AAte en dema=
ndant tous les noms commen=C3=A7ant par "A", "B", "C"... ou avec des "?"

Je n'arrive pas =C3=A0 trouver de r=C3=A9ponse =C3=A0 ma question sur les d=
iff=C3=A9rentes recherches que j'ai pu effectuer.

Je ne sais pas cod=C3=A9 mais je peux vous envoyer ma table si cela peut ai=
der.

Merci de votre aide et bonne journ=C3=A9e
Cordialement,

7 réponses

Avatar
titan
Le 10/01/2019 à 11:19, AdelineDS a écrit :
Bonjour,
Je souhaiterais pouvoir faire une requête sur un champ "nom de patient".
J''ai monté une requête "doublon" afin d'extraire les noms de patients identiques, qui fonctionne.
J'aimerais pouvoir faire ce même type de requête mais en tronquant le résultat.
Il m'arrive d'avoir seulement les 3 1ère lettres du nom.
Si par exemple j'ai 2 fiches avec pour la première "Durand Marcel" et la 2ème "Dur Ma", je souhaiterais que la 2ème fiche sorte également. Le nom n'étant pas strictement identique ne sort pas dans la première requête doublon.
C'est un formulaire fait pour une année avec au final environ 4500 entrées à terme. Je ne peux donc pas monter une requête en demandant tous les noms commençant par "A", "B", "C"... ou avec des "?"
Je n'arrive pas à trouver de réponse à ma question sur les différentes recherches que j'ai pu effectuer.
Je ne sais pas codé mais je peux vous envoyer ma table si cela peut aider.
Merci de votre aide et bonne journée
Cordialement,

Bonjour.
Pour obtenir les trois premiers caractères d'un champ, il faut utiliser
la fonction ExtracChaîne (ou mid en SQL) qui permet d'extraire un ou
plusieurs caractères d'une chaîne de caractères.
En mode Création, après avoir sélectionné la table, on ajoute le champ
[nom du patient] qu'on modifie ainsi : initiales: ExtracChaîne([nom du
patient];1;3). "initiales" est le titre que j'ai choisi quand
l'exécution de la requête affichera le résultat, mais on peut mettre
n'importe quoi.
Si vous pratiquez le SQL, la requête s'écrira ainsi : SELECT DISTINCT
Mid([nom du patient],1,3) AS initiales
FROM [nom de la table
ORDER BY Mid([nom du patient],1,3);
Il n'y a plus qu'à passer à l'action.
Thierry
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
titan
Le 10/01/2019 à 14:37, AdelineDS a écrit :
Merci de votre retour.
Si j'écris ceci en SQL est-ce juste :
SELECT [2019].[N° Appel], [2019].[Nom de patient], [2019].[Libellé de la question CRPV], [2019].[Libellé de la question CEIP], [2019].[Traitement pris], [2019].[Tableau clinique], [2019].[Nom du médicament ou du produit], [2019].[Effet présenté]
FROM 2019
WHERE ((([2019].[Nom de patient]) In (SELECT [Nom de patient] FROM [2019] As Tmp GROUP BY [Nom de patient] HAVING Count(*)>1 ))) OR ((Mid([Nom de patient],1,3) AS initiales)
FROM 2019
ORDER BY [2019].[Nom de patient], Mid([nom de patient],1,3);
La 1ère partie de la requête provient du mode "Création" de la requête "doublon" (jusqu'à OR).
J'ai essayé en mode création mais cela ne fonctionne pas mieux...
Je sais que j'ai des noms de patient qui commence par les mêmes lettres puisque je retrouve dans ma table un "Baron" et un "Bart" mais si j'essaie il ne ressorte pas et je ne comprends pas pourquoi.
Merci de votre aide.
Cordialement
Le jeudi 10 janvier 2019 12:34:21 UTC+1, titan a écrit :
Le 10/01/2019 à 11:19, AdelineDS a écrit :
Bonjour,
Je souhaiterais pouvoir faire une requête sur un champ "nom de patient".
J''ai monté une requête "doublon" afin d'extraire les noms de patients identiques, qui fonctionne.
J'aimerais pouvoir faire ce même type de requête mais en tronquant le résultat.
Il m'arrive d'avoir seulement les 3 1ère lettres du nom.
Si par exemple j'ai 2 fiches avec pour la première "Durand Marcel" et la 2ème "Dur Ma", je souhaiterais que la 2ème fiche sorte également. Le nom n'étant pas strictement identique ne sort pas dans la première requête doublon.
C'est un formulaire fait pour une année avec au final environ 4500 entrées à terme. Je ne peux donc pas monter une requête en demandant tous les noms commençant par "A", "B", "C"... ou avec des "?"
Je n'arrive pas à trouver de réponse à ma question sur les différentes recherches que j'ai pu effectuer.
Je ne sais pas codé mais je peux vous envoyer ma table si cela peut aider.
Merci de votre aide et bonne journée
Cordialement,

Bonjour.
Pour obtenir les trois premiers caractères d'un champ, il faut utiliser
la fonction ExtracChaîne (ou mid en SQL) qui permet d'extraire un ou
plusieurs caractères d'une chaîne de caractères.
En mode Création, après avoir sélectionné la table, on ajoute le champ
[nom du patient] qu'on modifie ainsi : initiales: ExtracChaîne([nom du
patient];1;3). "initiales" est le titre que j'ai choisi quand
l'exécution de la requête affichera le résultat, mais on peut mettre
n'importe quoi.
Si vous pratiquez le SQL, la requête s'écrira ainsi : SELECT DISTINCT
Mid([nom du patient],1,3) AS initiales
FROM [nom de la table
ORDER BY Mid([nom du patient],1,3);
Il n'y a plus qu'à passer à l'action.
Thierry
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus


Ne sachant pas comment est organisée votre base de données, il est
difficile de donner une réponse évidente. Mais si je comprends bien la
requête, elle doit bien fonctionner jusqu'à OR : elle sert à afficher
des informations sur les patients dont le nom est présent au moins deux
fois dans la table.
Après OR, je crois comprendre que vous avez voulu ajouter une clause
supplémentaire, mais ce n'en est pas une une. Au mieux, elle est
incomplète, c'est comme si vous écriviez select MonChamp from MaTable
where Mid(MonChamp,1,3); Vous obtenez une erreur à l'exécution, car on
attend un signe = suivi de la condition.
Quoi qu'il en soit, je ne comprends pas précisément à quoi vous voulez
aboutir. Dans votre requête, vous affichez le champ [nom du patient] :
il ne s'agit donc pas d'un regroupement sur les trois premiers
caractères des noms de patient. D'autre part, un même nom de patient
sera autant de fois affiché qu'il est présent dans la table (je pense
aux informations qu'on trouve dans les autres champs de la table).
Si vous pouviez donner un exemple du résultat souhaité, ce serait plus
compréhensible et permettrait d'y voir plus clair.
Avatar
titan
Le 10/01/2019 à 16:31, AdelineDS a écrit :
En fait pour faire simple dans mon champ nom de patient, je peux aussi bien saisir des noms complets que tronqué.
Par exemple Dupont ou Dup suivant que l'on m'ait fourni l'identité complète ou non du patient. Ce champ "nom de patient" ne me sert finalement qu'à retrouvé les entrées des différentes questions d'où les autres critères de ma requête.
Je souhaiterais pouvoir éviter les vrais doublons, en les retrouvant a posteriori afin de les supprimer.
Le nom de patient ne doit cependant pas être bloqué puisque pour un même patient je peux avoir différentes questions posées.
Ce que je veux éviter c'est qu'une même question pour un même patient soit saisie.
Je ne sais pas si c'est plus clair pour vous.
Je peux vous envoyer ma table si vous pensez que ce sera plus facile :-).
Merci d'avoir pris le temps de me répondre.
Ne sachant pas comment est organisée votre base de données, il est
difficile de donner une réponse évidente. Mais si je comprends bien la
requête, elle doit bien fonctionner jusqu'à OR : elle sert à afficher
des informations sur les patients dont le nom est présent au moins deux
fois dans la table.
Après OR, je crois comprendre que vous avez voulu ajouter une clause
supplémentaire, mais ce n'en est pas une une. Au mieux, elle est
incomplète, c'est comme si vous écriviez select MonChamp from MaTable
where Mid(MonChamp,1,3); Vous obtenez une erreur à l'exécution, car on
attend un signe = suivi de la condition.
Quoi qu'il en soit, je ne comprends pas précisément à quoi vous voulez
aboutir. Dans votre requête, vous affichez le champ [nom du patient] :
il ne s'agit donc pas d'un regroupement sur les trois premiers
caractères des noms de patient. D'autre part, un même nom de patient
sera autant de fois affiché qu'il est présent dans la table (je pense
aux informations qu'on trouve dans les autres champs de la table).
Si vous pouviez donner un exemple du résultat souhaité, ce serait plus
compréhensible et permettrait d'y voir plus clair.


Je ne suis pas sûr d'avoir compris votre objectif, mais voici ce que
j'ai tiré de ce que vous avez écrit.
Un même patient peut exister plusieurs fois dans la table, et ce soit
avec le même nom, soit d'une autre façon.
En restitution, vous pourriez afficher les trois premiers caractères de
chaque nom de patient, puis le nom complet du patient et les champs qui
vous intéressent. Il faudrait trier les résultats sur les trois premiers
caractères, puis sur le nom du patient, ce qui permettrait de repérer
visuellement les éventuels doublons. C'est une démarche fastidieuse,
mais elle tient au fait que votre base de données n'est pas constituée
de façon optimale puisqu'on y trouve des informations redondantes telles
que le nom du patient.
Vous risquez chaque année d'être confrontée au même problème.
Avatar
Michel__D
Bonsoir,
Le 10/01/2019 à 19:00, AdelineDS a écrit :
Oui ce serait très bien mais je ne sais pas comment formuler cette requête.
:-)

La réponse t'a en partie déjà été donnée, cela devrait ressembler à ce qui suit.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la question CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicament ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT DISTINCT Left([Nom de patient], 3) FROM [2019])
ORDER BY T.[Nom de patient];
Mais bon, sans plus de rigueur sur la saisie des informations, cela va vite devenir ingérable.
Avatar
Michel__D
Re,
Le 10/01/2019 à 19:48, Michel__D a écrit :
Bonsoir,
Le 10/01/2019 à 19:00, AdelineDS a écrit :
Oui ce serait très bien mais je ne sais pas comment formuler cette requête.
:-)

La réponse t'a en partie déjà été donnée, cela devrait ressembler à ce qui suit.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la question CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicament ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT DISTINCT Left([Nom de patient], 3) FROM [2019])
ORDER BY T.[Nom de patient];
Mais bon, sans plus de rigueur sur la saisie des informations, cela va vite devenir ingérable.

Rectificatif, c'est vrai que c'est les doublons qui sont recherchés.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la question CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicament ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT Left([Nom de patient], 3) FROM [2019] GROUP BY
Left([Nom de patient], 3))
ORDER BY T.[Nom de patient];
Avatar
Michel__D
Re,
Le 10/01/2019 à 19:48, Michel__D a écrit :
Bonsoir,
Le 10/01/2019 à 19:00, AdelineDS a écrit :
Oui ce serait très bien mais je ne sais pas comment formuler cette requête.
:-)

La réponse t'a en partie déjà été donnée, cela devrait ressembler à ce qui suit.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la question CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicament ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT DISTINCT Left([Nom de patient], 3) FROM [2019])
ORDER BY T.[Nom de patient];
Mais bon, sans plus de rigueur sur la saisie des informations, cela va vite devenir ingérable.

Ceci est adaptée pour les doublons.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la question CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicament ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT Left([Nom de patient], 3) FROM [2019] GROUP BY
Left([Nom de patient], 3) HAVING Count(*)>1)
ORDER BY T.[Nom de patient];
Avatar
AdelineDS
Bonjour,
Et merci de votre aide, je teste ce matin et vous direz si cela fonctionne !
Bonne journée
Le jeudi 10 janvier 2019 20:00:38 UTC+1, Michel__D a écrit :
Re,
Le 10/01/2019 à 19:48, Michel__D a écrit :
Bonsoir,
Le 10/01/2019 à 19:00, AdelineDS a écrit :
Oui ce serait très bien mais je ne sais pas comment formuler cett e requête.
:-)

La réponse t'a en partie déjà été donnée, cela devrait ressembler à ce qui suit.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la que stion CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médica ment ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT DISTINCT Left([Nom de pati ent], 3) FROM [2019])
ORDER BY T.[Nom de patient];
Mais bon, sans plus de rigueur sur la saisie des informations, cela va vite devenir ingérable.

Ceci est adaptée pour les doublons.
SELECT T.[N° Appel], T.[Nom de patient], T.[Libellé de la quest ion CRPV], T.[Libellé de la question
CEIP], T.[Traitement pris], T.[Tableau clinique], T.[Nom du médicame nt ou du produit], T.[Effet
présenté]
FROM 2019 AS T
WHERE Left(T.[Nom de patient], 3) In (SELECT Left([Nom de patient], 3) FR OM [2019] GROUP BY
Left([Nom de patient], 3) HAVING Count(*)>1)
ORDER BY T.[Nom de patient];