FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Condition if dans une requete sql dans access
 

Condition if dans une requete sql dans access

Il y a 401 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Condition if dans une requete sql dans access
 
Plus d'informations

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

Plus d'informations

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

Plus d'informations

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 :
  1. (if Month([Dossier].[dateARO]))=10 Then (Month([Dossier].[dateARO]))=01)
  2. 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 :
  1. ((((Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]))
  2. (Year([Dossier].[dateARO])*10000)+(Month([Dossier].[dateARO])*100)+Day([Dossier].[dateARO]) as convAro


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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]))));

Plus d'informations

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.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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

Plus d'informations

Ton orthographe se dégrade de message en message... Un petit effort serait bienvenue.
 
Maintenant à quoi te sert ceci :  
 

Code :
  1. ((((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.


Message édité par Freeman23 le 26-04-2007 à 13:46:04

---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

Code :
  1. SELECT Count([Dossier].[idAffaire]) AS Expr1
  2. FROM Dossier
  3. WHERE DateDiff("dd";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO]) ;


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


Message édité par romstek31 le 26-04-2007 à 15:18:02
Plus d'informations

Code :
  1. 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 :
  1. 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 :
  1. WHERE DateDiff("d";[Dossier].[dateRecepPlanMinute];[Dossier].[dateARO]) > 0


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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

Plus d'informations

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.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

Voila mes 2 requétes  
 

Code :
  1. SELECT Count([Dossier].[idAffaire])
  2. FROM Dossier
  3. WHERE (((Month([Dossier].[dateRecepPlanMinute])*100))=((tab3mois.moisliste)*100)) And (((Year([Dossier].[dateRecepPlanMinute])*10000))=((tab3mois.anneeliste)*10000)) And ((([Dossier].[dateRecepPlanMinute]-[Dossier].[dateARO])<28));


 
qui est divisée par celle ci
 

Code :
  1. SELECT Count([Dossier].[idAffaire])
  2. FROM Dossier
  3. WHERE (((Month([Dossier].[dateRecepPlanMinute])*100))=((tab3mois.moisliste)*100)) And (((Year([Dossier].[dateRecepPlanMinute])*10000))=((tab3mois.anneeliste)*10000));

Plus d'informations

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.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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

Plus d'informations

Comment on affiche le résultat d'une requéte dans un champ sur un formaulaire ?

Plus d'informations

Je suppose que ton formulaire est déjà lié à une table ?


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

c bn jé resolu ce prob merci kan mm


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Condition if dans une requete sql dans access
 

Annonces Google