sql access probleme de requete - SQL/NoSQL - Programmation
Marsh Posté le 03-04-2008 à 16:01:13
Déjà tu peux éclater ton délai avec :
Code :
|
et puis modifies ton HAVING en :
Code :
|
et normalement tu auras qqch de correct
Marsh Posté le 03-04-2008 à 17:53:37
SELECT Format([Date cloture FT],"yyyymm" ) AS [Année mois], Count(base.[type d'imprimé]) AS [CompteDetype d'imprimé], case
WHEN ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN ([date cloture FT]-[date arrivée]) <20 THEN "11 < D < 20"
WHEN ([date cloture FT]-[date arrivée]) <30 THEN "21 < D < 30"
ELSE " D >= 30 "
end as délai
FROM base
GROUP BY Format([Date cloture FT],"yyyymm" ), base.[type d'imprimé]
HAVING (((base.[type d'imprimé]) in ("BNI-A","BNI-R",BNI-P","BNI-C" )));
j'ai donc fais la requête comme au dessu
et j'obtien le message d'erreur suivant
erreur de syntaxe (operateur absent) dans l'expression 'case
WHEN ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN ([date cloture FT]-[date arrivée]) <20 THEN "11 < D < 20"
WHEN ([date cloture FT]-[date arrivée]) <30 THEN "21 < D < 30"
Marsh Posté le 03-04-2008 à 18:21:41
Effectivement... Il semblerait que M$ dans son grand soucis de compatibilité n'est pas implémenté le CASE WHEN dans Access. Cependant avec un switch on peut visiblement faire la même chose (valable uniquement sur Accesss)
Code :
|
Plus d'info sur le switch : http://www.webcheatsheet.com/SQL/a [...] switch.php
Marsh Posté le 21-11-2008 à 09:09:31
Merci pour l'astuce.
J'ai l'habitude de travailler sous SQL Server et l'erreur Access ne me parlait pas vraiment.
Gaetan
http://www.matelli.fr
babasss a écrit : Effectivement... Il semblerait que M$ dans son grand soucis de compatibilité n'est pas implémenté le CASE WHEN dans Access. Cependant avec un switch on peut visiblement faire la même chose (valable uniquement sur Accesss)
|
Marsh Posté le 03-04-2008 à 15:30:31
voila j'ai une BD dans la quel je doit extraire tout les demandes de travail qui on un temps de traitement inferieur a 10 jours, compris entre 10 et 20 jours, 21 et 30 jours et supérieur a 30 sachant que dans les demandes de travail elles ont un niveau d'urgence a,c,p et r
Donc dans le but de réduire les requêtes e d'éviter dans créer 16 par mois de l'année j'ai fais ceci
SELECT FORMAT([DATE CLOTURE FT],"MM/AAAA" ) AS [ANNEE MOIS], COUNT(BASE.[TYPE D'IMPRIME]) AS [COMPTEDETYPE D'IMPRIME]
FROM BASE
WHERE ((([DATE CLOTURE FT]-[DATE ARRIVEE])<10))
GROUP BY FORMAT([DATE CLOTURE FT],"MM/AAAA" ),BASE.[TYPE D'IMPRIME]
HAVING(((BASE.[TYPE D'IMPRIME]) LIKE "C" ));
Dans ma table je dispose en colonne de:
-type d'imprime (a,p,c,r)
-date arrivée
-date clôture
Donc avec ma requête j'obtiens bien toutes les demandes <10 jour pour c
Mais je n'arrive pas à afficher en même temps pour les autre demande r,p,a et pour les autres temps de traitement 10 et 20 jours, 21 et 30 jours et supérieur a 30
Est il possible de créer une requête pour tout sa? (sachant que je ne suis pas très bon en macro)