Condition if dans une requete sql dans access

romstek31

Nouveau membre
Bonjour j'ai un prob dans une requete dans access je veux mettre une condition if
mais je ne trouve pa la bonne sintaxe
pouvez vous m'aider et me dire si c possible
je vous laisse mon code

SELECT Count([Dossier].[idAffaire]) FROM Dossier WHERE( (if Month([Dossier].[dateARO]))=10 Then (Month([Dossier].[dateARO]))=01)And ((Month([Dossier].[dateMEC])*100))=((tab3mois.moisliste)*100)) And
(((Year([Dossier].[dateMEC])*10000))=((tab3mois.anneeliste)*10000)) And
((((Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]))<((Year([Dossier].[dateMEC])*10000)+(Month([Dossier].[dateMEC])*100)+Day([Dossier].[dateMEC]))))

merci d'avance pour vos reponses vos reponses
 

romstek31

Nouveau membre
quand j'éxécute cette requete ça me mé " erreur de syntaxe ( opérateur absent ) dans l'espression ...
 

Freeman23

Expert
Un if dans un where c'est totalement impossible, par contre il existe le iif que tu peux mettre dans un select.

Je dois avouer que ta requête faire peur et c'est totalement incompréhensible, donc ce que je peux te conseiller c'est de commencer par faire une requête select simple qui convertit tout tes champs, et une deuxième requête qui applique ton count avec les conditions.

A la place de ca dans le where tu le met dans le select de la 1ere requete :

Code:
(if Month([Dossier].[dateARO]))=10 Then (Month([Dossier].[dateARO]))=01)

iif(Month([Dossier].[dateARO]) = 10;01;Month([Dossier].[dateARO])) as DtARO

Tu auras pour ta seconde requête un champs dtARO qui sera déjà retraité. Fais de même pour tes conversions complexes.
Code:
((((Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]))

(Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]) as convAro
 

romstek31

Nouveau membre
merci déja pr ça
mé dans ma requéte je dois faire 3 tests si 10 si 11 si 12 sinon
je les enchaine comment , j'avais essayé ça mé ça marche pa :s

SELECT Count([Dossier].[idAffaire]) FROM Dossier WHERE( (IIf (Month([Dossier].[dateARO]))=10,(Month([Dossier].[dateARO]))=01),IIf (Month([Dossier].[dateARO]))=11,(Month([Dossier].[dateARO]))=02),IIf (Month([Dossier].[dateARO]))=12,(Month([Dossier].[dateARO]))=03),Month([Dossier].[dateARO])=Month([Dossier].[dateARO])+3) And ((Month([Dossier].[dateMEC])*100))=((tab3mois.moisliste)*100)) And
(((Year([Dossier].[dateMEC])*10000))=((tab3mois.anneeliste)*10000)) And
((((Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]))<((Year([Dossier].[dateMEC])*10000)+(Month([Dossier].[dateMEC])*100)+Day([Dossier].[dateMEC]))));
 

Freeman23

Expert
Il faut que tu fasses 2 requetes, passe par le créateur de requête et non directement par SQL.

Dans la première tu met tes tables, et tu créé tous les champs que tu auras besoin avec juste un select sans condition, car tu ne peux pas mettre de if ou iif dans un where.

Puis tu créé une seconde requête tu verras en mode création tu peux choisir une table ou une requête donc tu prend ta première requete en source et tu fais ton select count avec tes conditions directement avec tes champs.
 

romstek31

Nouveau membre
commmen on fé pr ke le 0 ds le 02 reste et ki passe pa a 2 tt court
car ça nik mes calculs sinon
 

Freeman23

Expert
Ton orthographe se dégrade de message en message... Un petit effort serait bienvenue.

Maintenant à quoi te sert ceci :

Code:
((((Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]))

Si il s'agit de remettre en forme le format d'une date regarde plutot la fonction Format et pour la comparaison de date : Datediff
Car à partir du moment ou tu fais des multiplications tes données deviennent des entiers ou réel et donc plus de stockage de chiffre inutile.
 

romstek31

Nouveau membre
[cpp]
SELECT Count([Dossier].[idAffaire]) AS Expr1
FROM Dossier
WHERE DateDiff("dd";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO]) ;[/cpp]

ça me met qu'il y a une erreur de syntaxe dans l'expression, je ne compren pa la
 

Freeman23

Expert
Code:
DateDiff("dd";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO])
Datediff te renvoie la différence en jour, donc par exemple ce que tu as écris va faire : "WHERE 2" ca fait logiquement une erreur si tu ne compare pas derrière à qqch.
Un seul "d" suffit.
Code:
DateDiff("d";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO])
Si tu regardes l'aide tu verras ceci : DateDiff(interval,date1,date2)

Si date1 est plus récent que date2 la fonction renvoie une valeur négative et positive dans le cas contraire, donc suivant ce que tu veux il faut que tu mettes un <=0 ou >=0.
Code:
WHERE DateDiff("d";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO]) > 0
 

romstek31

Nouveau membre
c'est bon merci j'ai trouver une autre façon de faire sans Date Diff
Mais est ce que c possible de faire une différence entre le résultat de 2 réquetes différentes.
C a dire resultat requete 1 / resultat requete 2 = requete 3
 

Freeman23

Expert
Tout dépend de tes requêtes, mais si il s'agit de requête avec une seule ligne de résultat tu peux.

Sinon il te faut un ID commun au deux requêtes pour les lier via le mode création.
 

romstek31

Nouveau membre
Voila mes 2 requétes

[cpp]SELECT Count([Dossier].[idAffaire])
FROM Dossier
WHERE (((Month([Dossier].[dateRecepPlanMinute])*100))=((tab3mois.moisliste)*100)) And (((Year([Dossier].[dateRecepPlanMinute])*10000))=((tab3mois.anneeliste)*10000)) And ((([Dossier].[dateRecepPlanMinute]-[Dossier].[dateARO])<28));
[/cpp]

qui est divisée par celle ci

[cpp]SELECT Count([Dossier].[idAffaire])
FROM Dossier
WHERE (((Month([Dossier].[dateRecepPlanMinute])*100))=((tab3mois.moisliste)*100)) And (((Year([Dossier].[dateRecepPlanMinute])*10000))=((tab3mois.anneeliste)*10000));
[/cpp]
 

Freeman23

Expert
Comme je te l'ai dit ca ne pose aucun problème dans ce cas puisque les requêtes ne renvoient qu'un seul enregistrement. Par contre nomme tes champs résultats avec "As" ou en mode création en préfixant ton champs par => nom : count([Dossier].[idAffaire])

- Tu créé une nouvelle requête en mode création.
- Quand tu ajoutes les tables tu vas sur l'onglet requête
- Tu met tes deux requêtes et tu créé un champs contenant la division des 2 autres.
 

romstek31

Nouveau membre
merci ça marche ;)
si j'ai d'autres problemes , je peux te poser des question par la suite ??
 

romstek31

Nouveau membre
Comment on affiche le résultat d'une requéte dans un champ sur un formaulaire ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 162
Messages
6 718 642
Membres
1 586 458
Dernier membre
Alex932
Partager cette page
Haut