gratifiant > microsoft.* > microsoft.access

AdelineDS (10/01/2019, 12h19)
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,
titan (10/01/2019, 13h34)
Le 10/01/2019 à 11:19, AdelineDS a écrit :
[..]
> 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
AdelineDS (10/01/2019, 15h37)
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 :
[..]
titan (10/01/2019, 16h23)
Le 10/01/2019 à 14:37, AdelineDS a écrit :
[..]
> Merci de votre aide.
> Cordialement
> Le jeudi 10 janvier 2019 12:34:21 UTC+1, titan a écrit :


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.
AdelineDS (10/01/2019, 17h31)
En fait pour faire simple dans mon champ nom de patient, je peux aussi biensaisir 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 aposteriori 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.

Le jeudi 10 janvier 2019 15:23:51 UTC+1, titan a écrit :
[..]
titan (10/01/2019, 18h25)
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.



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.
AdelineDS (10/01/2019, 20h00)
Oui ce serait très bien mais je ne sais pas comment formuler cette requête.
:-)

Le jeudi 10 janvier 2019 17:25:05 UTC+1, titan a écrit :
[..]
Michel__D (10/01/2019, 20h48)
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.
Michel__D (10/01/2019, 20h55)
Re,

Le 10/01/2019 à 19:48, Michel__D a écrit :
> Bonsoir,
> Le 10/01/2019 à 19:00, AdelineDS a écrit :
> 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];
Michel__D (10/01/2019, 21h00)
Re,

Le 10/01/2019 à 19:48, Michel__D a écrit :
> Bonsoir,
> Le 10/01/2019 à 19:00, AdelineDS a écrit :
> 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];
AdelineDS (11/01/2019, 10h37)
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 :
[..]
Discussions similaires