Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/06/2011, 10h41   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
Par défaut cas d'école : Requête combinée avec test sur une colonne

Bonjour,
J'ai un champ dans une colonne A qui contient 6 caractères, les deux premiers caractère de la colonne servent de référence.
Besoin : Mis à jour de la colonne B en fonction de la colonne A en fonction des critères ci-dessous :
-1) Si la valeur d'une ligne de la colonne A se termine par 0000 je met 1 dans la colonne B
-2) Si la valeur d'une ligne de la colonne A se termine par 000 je met 2 dans la colonne B
-3) Si la valeur d'une ligne de la colonne A se termine par 00 je met 3 dans la colonne B
-4) Cas particulier : Si pour une valeur de la colonne A il n'existe pas de valeurs avec cas dans B à 2 je met 3 à la place de 2
Exemple de résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneB
210000 1
213000 3
220000 1
223000 2
223100 3
380000 1
383000 2
383100 3
290000 1
293000 3
J'ai la requête pour les 3 premiers cas, il me manque le cas particulier avec le test du cas 4). Merci de votre aide.
Code :
1
2
3
 
UPDATE Datamart INNER JOIN FileInput_IMSPA_ZCIM11 ON Datamart.SAPIdentification_IONumber_=FileInput_IMSPA_ZCIM11.IONumber_ SET Datamart.AMDSLevel_ = IIF(RIGHT(FileInput_IMSPA_ZCIM11.IOChapter_,4)='0000',1,IIF(RIGHT(FileInput_IMSPA_ZCIM11.IOChapter_,3)='000',2,IIF(RIGHT(FileInput_IMSPA_ZCIM11.IOChapter_,2)='00',3,NULL)))
WHERE Datamart.Identification_PMPB_= 'DS-01';
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h35   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour teuzadur,

Que veux-tu dire par :
Citation:
Envoyé par teuzadur Voir le message
-4) Cas particulier : Si pour une valeur de la colonne A il n'existe pas de valeurs avec cas dans B à 2 je met 3 à la place de 2
En regardant ton exemple :
Citation:
Envoyé par teuzadur Voir le message
Exemple de résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneB
210000 1
213000 3
220000 1
223000 2
223100 3
380000 1
383000 2
383100 3
290000 1
293000 3
je n'ai pas compris la règle de gestion pour les valeurs 213000 et 293000.
Est-ce que cela signifie "Si la valeur d'une ligne de la colonne A se termine par 000 et qu'il y a 3 en 3ème position je met 3 dans la colonne B" ?
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h58   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
C'est un cas un peu particulier pour lequel il n'existe pas de valeur dans la colonne A ou B est à 3. Donc s'il existe un cas dans la colonne A ou B est à 2 on met directement 3.

Algo :
Au départ
Code :
1
2
3
ColonneA ColonneB
210000
213000
Pour 210000 se termine par '0000' on met 1 dans B
Pour 213000 se termine par '000' on met 2 dans B, comme il n'existe pas de cas 213X00 (où X différent de 0) dans la colonne A on met directement 3 dans B. J'espère que c'est plus clair. Parfois par la parole c'est bcp plus simple que par l'écrit.
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 12h18   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Désolé, ce n'est pas beaucoup plus clair pour moi !

quelle est la règle de gestion qui te dit ?
Citation:
comme il n'existe pas de cas 213X00 (où X différent de 0) dans la colonne A
Car dans ton exemple, il y a bien la valeur 213000 dans la colonne A !

il faudrait alors faire un traitement en 2 temps :
1) identifier les valeurs "impossibles" et y mettre un flag OK / NOK
2) tester ensuite en fonction du nombre de 0 à droite et du flag
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h49   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
Mince, pourtant en soit c'est super simple. Ma requête dans un post précédent répond presque au problème sauf qu'il me manque le traitement du cas 4)

La réponse à ta question <quelle est la règle de gestion qui te dit ?>
Code :
1
2
3
ColonneA ColonneB
210000 1
213000 3
Pour faire simple il existe 4 tests : 1) 2) 3) 4)
Les critères 1) 2) existent, comme 3) absent on applique le cas 4) soit mettre la valeur 3 à la place de la valeur 2 dans la colonne B.

4) Cas particulier : Si pour une valeur de la colonne A il n'existe pas de critères correspondant à 3) dans B je met 3 à la place de 2.
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h06   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Je n'ai pas du avoir le déclic, car quand je vois 213000 dans A, je devrais bien mettre 2 dans B.
Alors que dans ton cas, pour la valeur 213000 tu voudrait mettre 3 dans B.

Quelle est donc la règle de gestion qui permet de différencier 223000 (-> b=2) de 213000 (-> b=3) ?
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h12   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
On s'approche car tu as tout dit :
car quand je vois 213000 dans A, je devrais bien mettre 2 dans B.
->Oui

Alors que dans ton cas, pour la valeur 213000 tu voudrait mettre 3 dans B.
->Oui. Règle de gestion : il n'existe pas de cas 3) pour cet exemple donc je force la valeur 3 à la place de la valeur 2 dans B.

Quelle est donc la règle de gestion qui permet de différencier 223000 (-> b=2) de 213000 (-> b=3) ?
Réponse au-dessus. Dans le premier exemple j'ai un regroupement de deux lignes, par contre dans le deuxième exemple j'ai un regroupement de trois lignes. Dans le deuxième exemple j'ai un cas 3) alors que dans le premier NON.
C'est plus clair?
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h29   #8
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Teuzadur,

Non, ce n'est pas plus clair, car tu es en train de nous communiquer les informations au compte-goutte.
tu nous dis :
Citation:
Dans le premier exemple j'ai un regroupement de deux lignes, par contre dans le deuxième exemple j'ai un regroupement de trois lignes
C'est une information que nous n'avions pas auparavant.

Maintenant, je m'aperçois de mon côté que je n'avais pas intégré que :
Citation:
dans une colonne A qui contient 6 caractères, les deux premiers caractère de la colonne servent de référence.
Est-ce que le 3ème caractère est calculé en fonction d'une règle de gestion particulière ? En effet, tu ne nous précise pas comment savoir si la c'est un regroupement de 2, 3 lignes ou plus ...
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h50   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
Tout est dans les posts précédents, je ne peux pas être plus clair malheureusement. Sans être indélicat j'ai l'impression que tu ne lis pas correctement les posts.
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h55   #10
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
alors, je ne peux rien pour toi malheureusement; je dois avoir atteint mes limites de compréhension.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 15h22   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
Je suis preneur de toute aide si quelqu'un peut m'aider. Si vous avez des questions ou si je ne suis pas clair dites moi si je peux aider à la compréhension.
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 19h29   #12
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Teuzadur et Dumas.blr,

Citation:
Envoyé par Teuzadur
Sans être indélicat j'ai l'impression que tu ne lis pas correctement les posts.
==> mais, tu l'es quelque peu, concernant un bénévole qui a, de surcroît, l'habitude d'aider les visiteurs avec brio.


Ta demande est une (mini) usine à gaz, et je me demande s'il n'y a pas quelque chose à faire en amont. Mais bon... analysons ton besoin initial.

A mon avis, il faut passer par plusieurs étapes, avec des tables temporaires. Donc, à partir de ton exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneB
210000   1
213000   3
220000   1
223000   2
223100   3
380000   1
383000   2
383100   3
290000   1
293000   3
en triant par ColonneB, nous obtenons :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneB
210000   1
220000   1
290000   1
380000   1
223000   2
383000   2
213000   3
223100   3
293000   3
383100   3
*****
Il me semble comprendre que la seule raison pour laquelle ont ColonneB=3 est que 213 et 293 n'existe pas.
*****
A contrario, la raison pour laquelleont ColonneB=2 est que 223x et 383x existe.
*****

Si, jusque là, tout est juste... suggestion :
Requête R1 qui sépare les premiers chiffres<> 0 des chiffres=0, qui donnera :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneA_1
21	 0000
22	 0000
29	 0000
38	 0000
223	 000
383	 000
213	 000
2231	 00
293	 000
3831	 00
Requête R2 qui affecte ColonneB sans exception, qui donnera :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneA_1 ColonneB
21	 0000	    1
22	 0000	    1
29	 0000	    1
38	 0000	    1
223	 000	    2
383	 000	    2
213	 000	    2
2231	 00	    3
293	 000	    2
3831	 00	    3
Requête R3 qui gère les exceptions, ne traitant que ColonneB=2 et cherchant la non-correspondance. Ce qui donnera :
Code :
1
2
3
4
5
6
7
8
9
10
11
ColonneA ColonneA_1 ColonneB
21	 0000	    1
22	 0000	    1
29	 0000	    1
38	 0000	    1
223	 000	    2 
383	 000	    2
213	 000	    3
2231	 00	    3
293	 000	    3
3831	 00	    3
Je ne te détaille pas les requêtes (qui seront à travailler), mais je pense que tu voies l'esprit.

En règle générale, la tendance à vouloir tout régler en une seule requête est souvent dommageable : le découpage du travail en sous-tâches est souvent plus efficace.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 14h14   #13
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 39
Points : 13
Points : 13
Bonjour,
J'ai trouvé une solution à mon problème directement dans le code vb.net en passant par plusieurs requêtes. Richard ta réponse ne correspond pas à mon besoin, c'est beaucoup plus simple, désolé pour le manque de clarté dans mes explications. Merci de votre aide.
Cordialement,
teuzadur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web