Access Pb: Prendre la olus petite valeur entre plusieurs valeurs

[Résolu]
Signaler
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005
-
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005
-
Bonjour,

Je travaille actuellement sur une base de donnée importante regroupement des informations produits
,concurrents etc. Pour expliquer simplement, je veux comparer plusieurs colonnes prix, lignes par
lignes, et sur une autre colonne avoir le plus petit prix des différentes clonnes, lignes par lignes.
Chaques colonnes prix correspondent à un concurrents et chaques concurrents a sa propre table.
Donc voila si qqn pouvait m'aider ca serait super
Merci , d'avance


Ben duc, cordialement

11 réponses

Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Et oui, pour access: null opérateur x = null

Donc pour ça, c'est simple, il suffit de faire des iif imbriqués

Si Prixconcu1 = null remplacer par 0 sinon Prixconcu1

Si Prixconcu2 = null remplacer par 0 sinon Prixconcu2

Faire la comparaison et retourner la valeur, ça donne

iif((iif(isNull(PrixConcu1);0;Prixconcu1) >
iif(isNull(PrixConcu2);0;Prixconcu2));
iif(isNull(PrixConcu2);0;Prixconcu2);iif(isNull(PrixConcu1);0;Prixconcu1))


PS: N'oublies de mettre réponse acceptée merci.
TBBUIM
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
2169
Date d'inscription
vendredi 20 avril 2001
Statut
Membre
Dernière intervention
30 juin 2009
8
elle est pas clair l'architecture de ta Base...
donnes des exemples de ligne de tes tables avec leurs noms et ceux de tes champs avec leurs types .

et ce que tu veux obtenir au final

It@li@
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005

Ok voici mon architecture,

Pour l'exemple j'ai 5 tables:
- Table 1: (2 champs) Ref OE - Carmaker
- Table 2: (2 champs) Ref OE - Ref Concurrent1
- Table 3: (2 champs) Ref OE - Ref Concurrent2
- Table 4: (2 Champs) Ref Concurrent1 - Prix Concurrent1
- Table 5: (2 champs) Ref Concurrent2 - Prix Concurrent2
(Les liaisons sont je pense logique a voir)

But: Requete affichant,
Le champs Ref OE - Prix Concurrent1 - Prix Concurrent2 - ?
Et une quatrième colonne m'affichant le plus petit prix entre Prix Concurrent1 et Prix Concurrent2.

Ex.
Ref OE Prix Concurrent1 Prix Concurrent2 Champ4
45TX32 23.4 22.1 22.1
789852 17 18.9 17

Voila, je n'arrive pas a trouver le language qui permettrer à access de Comparer les deux colonnes
prix et de ne prendre que la plus petite valeur.
Merci d'avance pour l'aide


Ben duc, cordialement
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005

Je redonne juste mon exemple, en esperant que la forme soit plus clair.

Ex:

RefOE: 4587 PrixConcu1: 28.5 PrixConcu2: 30 Champ4: 28.5 .
RefOE: 7896 PrixConcu1: 17 PrixConcu2: 18.5 Champ4: 17 .


Ben duc, cordialement
Messages postés
2169
Date d'inscription
vendredi 20 avril 2001
Statut
Membre
Dernière intervention
30 juin 2009
8
Tu travails en VB ou seulemnt dans ACCESS..

Le Resultat ne peux pas s'obtenir à l'aide d'une seule Requéte il te faut une Boucle pour comparer les 2 Valeurs.

Si tu es en VB tu travail e D.A.O ou A.D.O ?

La TAble 1 n'intervient pas ??

It@li@
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005

Je travaille seulement sur Access avec les fonctions intégrées et autres opérateurs mais je vois tres bien comment acceder sur le SQL.

Boucle ou pas ta solution sera la mienne. Mais bon ca parrait dur a faire si tu penses que le copier coller de code sources a ses limites dit le moi. mais si tu as un cheminement sur access pas de pb.

La table 1-2-3 interviennent juste pour avoir le nombres de lignes adequates.
La table 1 est lié à 2 et 3
Mais la presence des champs de ces trois tables dans la requete n'est qu'optionnel. Le plus important c'est d'avoir les
colonnes prix et la colonne comparaison.


Ben duc, cordialement
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
On peut quasiment tout faire avec les requêtes ACCESS, c'est trop puissant!

Encore faut-il connaitre le SQL sur le bout des doigts ou avoir un bon bouquin

Dans ton cas, ça m'a l'air super ultra de chez simple, pas besoin d'être un cador du SQL lol



En fait, il te suffit de faire un expression dans ta colonne qui dit:

Si le concurrent 1 > concurrent2 alors affiche Concurrent2 sinon Concurrent1

Champ4: iif((PrixConcu1>PrixConcu2);PrixConcu2;PrixConcu1)

TBBUIM
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005

Tbbuim1 je te remercie c presque ca.
Juste un petit pb: Si ici le concurrent1 n'a pas de prix pour une reference donnee mais que le concurrent2 en a un,
Access avec la formule que tu m'as donnée ne prendra pas par default le prix du concurrent2. (l'inverse marche).
Ex
REfOE:45897 Prixconcu1: (rien) Prixconcu2: 30 Champ4: (rien)

Voila si tusavais comment améliorer ca et si tu pouvais montrer le shéma pour etendre la formule à plusieurs concurrent.
Merci enormement en tous les cas


Ben duc, cordialement
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Pour ce qui est des concurrents supérieurs à 2, tu peux faire des iif
imbriqués en faisant des "tournois" entre les concurrents lol. Genre
(C1>C2) > (C3>C4)

Tu peux faire énormément de chose avec IIF à toi de savoir l'exploiter.

Sinon il existe une autre solution

MAIS ATTENTION, ça devient compliqué...

Il faut utiliser la fonction UNION, mais attention, il faut que les
champs dans les différentes tables aient le mm nom... Exemple RefOE et
Prix

SELECT RefOE, Prix FROM Concurrent1

UNION ou UNION ALL pour les lignes dupliquées

SELECT RefOE, Prix FROM Concurrent2;



Et là, par exemple tu aurais comme résultat:

Balai | 10

Balai | 20

VHS | 5

VHS | 10



Il affiche à la suite sur 2 colonnes les résultats des requêtes.

Donc il ne te reste plus qu'à ajouter une colonne Nom à chaque Table
concurrent dans laquelle tu mettras leur nom, concurrent1,2,3... sur
chaque ligne de tous leurs produits.



De telle sorte que tu auras

Balai | 10 | concurrent1

Balai | 20 | Concurrent2



Comme ça pour savoir quel est le concurrent le moins cher pour chaque
produit, il te suffira de mettre l'expression MIN sur le prix et t'aura
le concurrent le moins cher de chaque produit.

Facile non? lollllllllllllllllllllllllllllllllllllllllllllllllllll

TBBUIM
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Dernière petite précision:

La fonction UNION ne peut se faire qu'en SQL, il faudra donc pour
exploiter le résultat à sa guise, tranférer ce dernier dans une requête
simple. Et là on pourra y ajouter l'opération MIN sur la colonne Prix...

TBBUIM
Messages postés
6
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
30 mars 2005

Ok pour les concurrents je dois pouvoir m'en sortir.
Je sais pas si tu as recu mon message sur le probleme de la valeur Null où je recois des messages erreurs.
regarde dans ta messagerie.
En tous cas j'approuve ton utilisation des smileys qui est tres judicieuse


Ben duc, cordialement