cs_Famas54
Messages postés59Date d'inscriptionmardi 12 septembre 2006StatutMembreDernière intervention21 août 2009
-
14 juil. 2008 à 11:16
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 2012
-
17 juil. 2008 à 15:04
Bonjour,
Je cherche sans succès à mettre en place dans une requête SELECT une restriction ou la valeur d'un champs influencerait celle d'un autre champs, je m'explique:
Si valeur.champA = valeur.champB
alors valeur.champC = valeur.champA
Sinon si valeur.champA <> valeur.champB
alors valeur.champC = valeur.champB
voilà grosso modo ce que je veux faire dans ma requête mais le Sql ne semble pas permettre de telles restrictions, si quelqu'un aurait une idée pour établir ce genre de choses dans un code Sql je suis preneur.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 14 juil. 2008 à 15:34
Salut,
Si c' est une requete Selection que tu veux,
tu peux faire ceci:
Select ChampA, ChampB, IIf(ChampA=ChampB,ChampA,ChampB)
As ChampC From MaTable;"
Notes bien que dans cette expression le ChampC est une colonne générée c à d que le champC ne fait pas partie de la structure de ta table.
Si c' est une mise à jour du champC qui cette fois fait partie de la table,tu tentes ceci:
"Update MaTable Set ChampC=IIf(ChampA=ChampB,ChampA,ChampB);"
PS: la fonction IIF() est l' &quivalent de Si...Sinon
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
cs_Famas54
Messages postés59Date d'inscriptionmardi 12 septembre 2006StatutMembreDernière intervention21 août 20092 15 juil. 2008 à 15:27
J'ai bien compris l'utilisation de la fonction IIF pour ce genre de situations et en fait j'utilise ce code dont j'affecte le résultat à un champs crée de manière temporaire lors de l'exécution de la requête.
En somme ce champs prendre telle ou telle valeur en fonction de celle d'un autre champs qui lui ne sera pas affiché lors de l'exécution de la requête.
Voiçi ma partie de code actuelle (qui ne semble encore pas accepté lorsque je tente de sauvegarder ma requête)
Expr1: IIf (([dbo_ID_CLASSENEW]![ACTIVE]=0,'Liquidé',[dbo_ID_CLASSENEW]![ACTIVE]=-1,'Actif'),'Pas Lancé')
Pour récapituler si le champs ACTIVE de la table dbo_ID_CLASSENEW 0 alors la valeur de Expr1 sera "Liquidé", sinon si ACTIVE -1 alors la valeur sera "Actif", sinon si la valeur n'est ni 0 ni -1 alors Expr1 renvera "Pas Lancé"
Voilà l'idée, j'ai un petit doute concernant la possibilité d'opérer à un tel choix avec la fonction IIF qui me semble vraiment restreinte à un Si/Sinon.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 juil. 2008 à 13:39
Salut,
A titre d' info, mon record pzerso est l' imbrication de
6 IIf dans une seule Expression.
Mais là c' était un cas très particulier.
Autrement, je pouvait procèder par étape.
Avec ton exemple, tu pourras faire ceci:
Génèrer la 2° Expr
Expr2:IIf([dbo_ID_CLASSENEW]![ACTIVE]=-1;'Actif';'Pas Lancé'))
Génèrer la 1° (celle qui t' interresse)en fonction de la 2°
Expr1: IIf ([dbo_ID_CLASSENEW]![ACTIVE]=0,
'Liquidé';Expr2)
une autre fois peut être
Bonne continuation.
.
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Pour récapitulatif:si POOLNOIND CLASSENOIND Alors valeur retournée 'Poolnoind'
sinon si POOLNOIND <> CLASSENOIND Alors valeur retournée = 'Classenoind'sinon si CLASSENOIND CSA_NOIND Alors valeur retournée 'CSA'
sinon Alors valeur retournée = 'Autres'
Au début j'ai plutot pensé à une erreur concernant la structure des parenthèses et crochets mais visiblement il me retourne le problème sur le nombre d'arguments.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 juil. 2008 à 16:30
re-salut,
c' est à mon avis une erreur au niveau de la structuration.
En d' autre terme, tu t' es mélé les pinceaux :-)
IIf([A_qry_Dbo_ID_Classnew]![POOLNOIND]<>[A_qry_Dbo_ID_Classnew]![CLASSENOIND]
est superflux car si on avait qu' un test, ça peut résumer à
If([A_qry_Dbo_ID_Classnew]![POOLNOIND]=[A_qry_Dbo_ID_Classnew]![CLASSENOIND];'Poolnoind';'Classenoind')
Si c' est pas égal c' est que c' est difféeznt
Maintenant tu peux insèrer un 2° IIf dans la partie False de cet IIF
Il fait la dissociation parfaitement entre Poolnoind et Classenoind mais m'affiche une inputbox venue de nul part pour la valeur CSA
Inputbox = dbo_ID_CSA!CSA_NOIND, donc au final la colonne TYPE_NOIND ne m'affiche que des Poolnoind et des Classenoind sans prendre en compte les conditions du troisième IIF, je ne vois pas pour quelle raison, j'ai veillé a appliqué la structure TEST/TRUE/FALSE à chaque fois.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 17 juil. 2008 à 15:04
s' il t' affiche unr inputbox, c' est qu' il n' arrive pas
à trouver [dbo_ID_CSA]![CSA_NOIND].
ou bien tu n' as pas référencé la table ou bien le champ
n' existe pas.
D' autre part pour avoir 'CSA' , il faut que
[A_qry_Dbo_ID_Classnew]![POOLNOIND]
<>[A_qry_Dbo_ID_Classnew
Et
A_qry_Dbo_ID_Classnew]![CLASSENOIND]
=[dbo_ID_CSA]![CSA_NOIND]
Est-ce bien le cas pour certaines lignes ?
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.